Estou procurando um comando para contar o número de todas as palavras em um arquivo. Por exemplo, se um arquivo é assim,
today is a
good day
então deve ser impresso 5
, pois há 5
palavras lá.
text-processing
wc
Richard
fonte
fonte
wc -w $FILE
?Respostas:
O comando
wc
aka. a contagem de palavras pode fazer isso:exemplo
fonte
wc -w
não têm a mesma definição que para o GNUgrep -w
. Parawc
uma palavra, é uma sequência de um ou mais caracteres não espaciais ([:space:]
classe de caractere no código do idioma atual). Por exemplo,foo,bar
efoo bar
(com um espaço sem quebra) são cada uma palavra.Eu vim com isso apenas para o número:
Eu também gosto da
wc -w < [file]
abordagemPor fim, para armazenar apenas a contagem de palavras em uma variável, você pode usar o seguinte:
Isso permite que você pule o nome do arquivo com elegância.
fonte
wc -w < "$file"
para APENAS o número.A melhor solução é usar o Perl:
@Bernhard
Você pode verificar o código fonte de
wc
comando do coreutils, eu testei na minha máquina, com o arquivosubst.c
no bash 4.2 source.E
Quanto maior o arquivo, mais eficiente o Perl é em relação a
wc
.fonte
wc
levei ~ 14seg enquanto Perl levou ~ 5seg!split
on/\s+/
é como um,split(' ')
exceto que qualquer espaço em branco à esquerda produz um primeiro campo nulo. Essa diferença fornecerá uma palavra extra (o primeiro campo nulo, ou seja) por link de linha . Portanto, use o(split(" ", $_))
contrário para um arquivo criado assim:echo -e "unix\n linux" > testfile
sua linha de base reporta três palavras.wc
será significativamente mais rápido, assim como comPERLIO=:utf8
,perl
será significativamente mais lento.Vamos usar o AWK!
Isso lista a frequência de cada palavra que ocorre no arquivo fornecido. Eu sei que não é o que você pediu, mas é melhor! Se você quiser ver as ocorrências da sua palavra, basta fazer o seguinte:
Eu até adicionei essa função aos meus arquivos .dotfiles
Fonte: Ruby da ala AWK
fonte
O
wc
programa conta "palavras", mas essas não são, por exemplo, as "palavras" que muitas pessoas verão quando examinam um arquivo. Ovi
programa, por exemplo, usa uma medida diferente de "palavras", delimitando-as com base em suas classes de caracteres, enquantowc
simplesmente conta as coisas separadas por espaços em branco . As duas medidas podem ser radicalmente diferentes. Considere este exemplo:vi
vê três palavras ( primeira e segunda , bem como a vírgula que as separa), enquantowc
vê uma (não há espaço em branco nessa linha). Existem muitas maneiras de contar palavras, algumas são menos úteis que outras.Embora o Perl seja mais adequado para escrever um contador para as palavras do estilo vi, aqui está um exemplo rápido de using
sed
,tr
ewc
(moderadamente portátil usando retornos de carro literais^M
):Comparando contagens:
wc
dá 28.Para referência, o POSIX vi diz:
fonte