Contando ocorrências de palavras no arquivo de texto

31

Eu tenho um arquivo de texto contendo tweets e sou obrigado a contar o número de vezes que uma palavra é mencionada no tweet. Por exemplo, o arquivo contém:

Apple iPhone X is going to worth a fortune
The iPhone X is Apple's latest flagship iPhone. How will it pit against it's competitors?

E digamos que eu queira contar quantas vezes a palavra iPhone é mencionada no arquivo. Então aqui está o que eu tentei.

cut -f 1 Tweet_Data | grep -i "iPhone" | wc -l

certamente funciona, mas estou confuso sobre o comando 'wc' no unix. Qual é a diferença se eu tentar algo como:

cut -f 1 Tweet_Data | grep -c "iPhone"

onde -c é usado? Ambos produzem resultados diferentes em um arquivo grande cheio de tweets e estou confuso sobre como ele funciona. Qual método é a maneira correta de contar a ocorrência?

Maxxx
fonte
cut -f1está cortando com base em guias, o que não está fazendo muito aqui. Tem certeza de que wc -lrealmente está lhe dando a contagem correta? Seria mostrado 2 aqui, mas conto 3 instâncias do "iPhone".
Jeff Schaller
Outra técnica: unix.stackexchange.com/q/39039/117549
Jeff Schaller
Também semelhante: unix.stackexchange.com/q/60727/117549
Jeff Schaller

Respostas:

54

Dado esse requisito, eu usaria um grep GNU (para a -oopção ) e depois passaria wcpara contar o número total de ocorrências:

$ grep -o -i iphone Tweet_Data | wc -l
3

Os grep -cdados simples contarão o número de linhas correspondentes, não o número total de palavras correspondentes. O uso da -oopção informa ao grep para gerar cada correspondência on-line, não importa quantas vezes a correspondência esteja na linha.

wc -ldiz ao wcutilitário para contar o número de linhas. Depois que o grep coloca cada correspondência em sua própria linha, este é o número total de ocorrências da palavra na entrada.


Se o GNU grep não estiver disponível (ou desejado), você poderá transformar a entrada trpara que cada palavra fique em sua própria linha e use grep -cpara contar:

$ tr '[:space:]' '[\n*]' < Tweet_Data | grep -i -c iphone
3
Jeff Schaller
fonte
1

O método mais fácil é,

grep -wc "your_text" FileName

para você será,

grep -wc "iPhone" Tweet_Data
Espectador silencioso
fonte
Resposta muito clara, no entanto, se você estiver combinando uma palavra como 'cool', você corresponderá apenas a cool e NÃO ccooll; portanto, esteja ciente de que os espaços ao redor da palavra são importantes.
jasonleonhard
11
O resultado estará incorreto quando a palavra ocorrer mais de uma vez em uma linha.
hek2mgl