Ordenar palavras no arquivo

1

Eu tenho alguns problemas que não sou capaz de superar. Eu preciso contar o primeiro digamos N palavras em um arquivo de texto. Então, eu tenho que imprimi-los em ordem decrescente, seguido pelo número de ocorrências. As palavras devem ser ordenadas alfabeticamente.

Como exemplo, se eu tiver 6 ocorrências da palavra " a ", 5 da palavra "b" , 5 da palavra c e n é dado como 2, eu vou imprimir:

a 6

b 5

Se eu tiver 10 ocorrências da palavra "la", 5 da palavra "hi", 5 de "zzz" e 5 de "arr", e n dado como 3, vou imprimir:

la 10

arr 5

hi 5

(o zzz é omitido intencionalmente).

O problema é que meu script (que está abaixo) imprime apenas uma palavra de cada número de ocorrências.

tr  [:space:] '\n' <$1| uniq -c|sort -rnuk1,1|awk '{print $2,$1}'|head -n

Como recurso extra, gostaria que o script pesquisasse o número de ocorrências de palavras nas primeiras m linhas de arquivo.

    
por gigiman 16.01.2016 / 20:05

2 respostas

1

Seu uso de tr é inteligente. Mas você precisa sort antes de usar uniq , porque uniq apenas analisa linhas adjacentes. Então nós temos

cat file.txt | sort | uniq -c | sort -r | awk '{print $2, $1}' | head -n 10

Além disso, como você pode ver, o uso de -k e -n para classificação é desnecessário neste caso (embora não esteja errado).

    
por 17.01.2016 / 02:52
2

A resposta para a primeira pergunta seria (se alguém estiver interessado?)

tr  [:space:] '\n' <$1| sort |uniq -c|sort -k1rn -k2n|awk '{print $2,$1}'|head -12

Ainda não sei como fazer essa parte.

As an extra feature , i'd like the script to seach number of occurencies of words in the first m lines of file.

    
por 16.01.2016 / 21:06