Estoy buscando un comando para contar el número de todas las palabras en un archivo. Por ejemplo, si un archivo es así,
today is a
good day
entonces debería imprimir 5
, ya que hay 5
palabras allí.
text-processing
wc
Ricardo
fuente
fuente
wc -w $FILE
?Respuestas:
El comando
wc
alias. el recuento de palabras puede hacerlo:ejemplo
fuente
wc -w
no tienen la misma definición que para GNUgrep -w
. Parawc
una palabra es una secuencia de uno o más caracteres no espaciales ([:space:]
clase de caracteres en el entorno local actual). Por ejemplofoo,bar
yfoo bar
(con un espacio sin interrupciones) son cada una de las palabras.Se me ocurrió esto por SOLO el número:
También me gusta el
wc -w < [file]
enfoqueFinalmente, para almacenar solo el recuento de palabras en una variable, puede usar lo siguiente:
Esto le permite omitir el nombre de archivo con elegancia.
fuente
wc -w < "$file"
por SOLO el número.La mejor solución es usar Perl:
@Bernhard
Puede verificar el código fuente del
wc
comando desde coreutils, lo pruebo en mi máquina, con el archivosubst.c
en la fuente bash 4.2.Y
Cuanto más grande es el archivo, más eficiente es Perl con respecto a
wc
.fuente
wc
tardé ~ 14 segundos mientras que Perl tardó ~ 5 segundos!split
on/\s+/
es como unsplit(' ')
excepto que cualquier espacio en blanco inicial produce un primer campo nulo. Esa diferencia le dará una palabra adicional (el primer campo nulo, es decir) por enlace de línea . Por(split(" ", $_))
lo tanto, use lo contrario para un archivo creado de esta manera:echo -e "unix\n linux" > testfile
su one-liner informa 3 palabras.wc
será significativamente más rápido, al igual que conPERLIO=:utf8
,perl
será significativamente más lento.¡Usemos AWK!
Esto enumera la frecuencia de cada palabra que aparece en el archivo proporcionado. Sé que no es lo que pediste, ¡pero es mejor! Si desea ver las ocurrencias de su palabra, simplemente puede hacer esto:
Incluso agregué esta función a mis archivos .dot
Fuente: AWK-ward Ruby
fuente
El
wc
programa cuenta las "palabras", pero esas no son, por ejemplo, las "palabras" que mucha gente vería cuando examinen un archivo. Elvi
programa, por ejemplo, usa una medida diferente de "palabras", delimitándolas en función de sus clases de caracteres, mientras quewc
simplemente cuenta las cosas separadas por espacios en blanco . Las dos medidas pueden ser radicalmente diferentes. Considere este ejemplo:vi
ve tres palabras ( primera y segunda , así como la coma que las separa), mientraswc
ve una (no hay espacios en blanco en esa línea). Hay muchas formas de contar palabras, algunas son menos útiles que otras.Si bien Perl sería más adecuado para escribir un contador para las palabras de estilo vi, aquí hay un ejemplo rápido usando
sed
,tr
ywc
(moderadamente portátil usando retornos de carro literales^M
):Comparación de recuentos:
wc
da 28.Como referencia, POSIX vi dice:
fuente