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 ao invés? Ambos produzem resultados diferentes em um grande arquivo cheio de tweets e estou confuso sobre como funciona. Qual método é a maneira correta de contar a ocorrência?
Comentários
Resposta
Dado esse requisito, eu use um GNU grep (para a -o
opção ), então passe-o por wc
para contar o número total de ocorrências:
$ grep -o -i iphone Tweet_Data | wc -l 3
Simples grep -c
nos 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 gerar cada correspondência em sua própria linha, não importa quantas vezes a correspondência foi encontrada na linha original.
wc -l
diz ao utilitário wc
para contar o número de linhas. Após o grep colocar 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ê pode transformar o introduza com tr
para que cada palavra fique na sua própria linha e, em seguida, utilize grep -c
para contar:
$ tr "[:space:]" "[\n*]" < Tweet_Data | grep -i -c iphone 3
Resposta
O método mais fácil é,
grep -wc "your_text" FileName
para você, será,
grep -wc "iPhone" Tweet_Data
Comentários
- Uma resposta muito clara, entretanto, se você estão combinando uma palavra como ' legal ' você só combinará legal e NÃO ccooll, então esteja ciente de que os espaços ao redor da palavra são importantes. li>
- O resultado estará incorreto quando a palavra ocorrer mais de uma vez em uma linha.
cut -f1
é o corte baseado em tabs, que ' não está fazendo muito aqui. Tem certeza de quewc -l
está realmente fornecendo a contagem correta? Ele mostraria 2 aqui, mas eu conto 3 instâncias de " iPhone ".