Contagem de ocorrências de palavra no arquivo de texto

7

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 em vez disso? Ambos geram resultados diferentes em um arquivo grande cheio de tweets e estou confuso sobre como isso funciona. Qual método é a maneira correta de contar a ocorrência?

    
por Maxxx 16.10.2017 / 15:23

1 resposta

21

Dado tal requisito, eu usaria um grep do GNU (para a -o option ), < em> then passa wc para contar o número total de ocorrências:

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

O grep -c dos dados contará o número de linhas correspondentes, não o número total de palavras correspondentes. Usar a opção -o diz ao grep para enviar cada correspondência em sua linha, não importa quantas vezes a correspondência esteja na linha.

wc -l informa ao utilitário wc para contar o número de linhas. Depois que o grep coloca cada correspondência em sua própria linha, esse é 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 com tr para que cada palavra esteja em sua própria linha, então use grep -c para contar:

$ tr '[:space:]' '[\n*]' < Tweet_Data | grep -i -c iphone
3
    
por 16.10.2017 / 15:31