Contando as instâncias de palavras específicas em um texto, usando awk [duplicate]

1

Se eu tiver um arquivo words_of_interest.txt com uma palavra por linha, existe uma maneira de usar awk (ou algumas outras ferramentas * nix) para obter o número de vezes que cada uma dessas palavras ocorre em outro arquivo de texto my_text.txt , usando apenas uma passagem?

Atualmente, estou grep -c 'no texto de cada palavra, mas isso é muito lento porque o texto é grande e há centenas de palavras para pesquisar.

EDIT: fornecendo entrada e saída de amostra:

[words_of_interest.txt]
joe
hi

[my_text.txt]
hi joe
hi jack
nice day today

[output]
joe 1
hi 2

EDIT2: Para aqueles que marcaram esta questão como duplicada: o é sobre a contagem all das palavras, enquanto esta é sobre a contagem apenas das instâncias de um conjunto específico de palavras predefinidas.

    
por mitchus 10.12.2014 / 19:33

1 resposta

1

Para cenários simplistas que envolvem pesquisa de cadeia fixa e palavras separadas por espaços em my_text.txt , o GNU awk pode funcionar, embora a ordem de saída possa não corresponder à de words_of_interest.txt

awk 'NR == FNR{a[$0]; next}; $0 in a{b[$0]++}; 
    END{for (k in b) print k, b[k]}' words_of_interest.txt RS='[[:space:]]+' my_text.txt
hi 2
joe 1
    
por 10.12.2014 / 19:59

Tags