Tenía un comando que funcionaba a través de un archivo de texto, contaba todas las apariciones de las palabras e imprimía así:
user@box $˜ magic-command-i-forgot | with grep | and awk | sort ./textfile.txt
66: the
54: and
32: I
16: unix
12: bash
5: internet
3: sh
1: GNU/Linux
Por lo tanto, no busca línea por línea, sino palabra por palabra, y lo hace para todas las palabras, no solo para 1 palabra. Lo encontré en algún lugar de Internet hace mucho tiempo, pero no puedo encontrarlo ni recordarlo.
tr -s
para manejar múltiples espacios, especialmente cuando encuentre sangría.-g
(--general-numeric-sort
) opción desort
puede ser preferible en algunos casos. Por ejemplosort -n
, mantendrá10\n1 4
como está, tratando1 4
como14
, mientras quesort -g
se tratará correctamente como1 4\n10
.echo "Lorem ipsum dolor sit sit amet et cetera." | tr ' ' '\n' | grep -v "^$" | sort | uniq -c | sort -bnr
Tenga en cuenta que soy un principiante, por lo que puedo estar equivocado, no dude en aconsejarme.Para dividir la entrada en palabras, reemplace cualquier carácter que considere un separador de palabras por una nueva línea.
fuente
No utilizo grep y awk pero parece hacer lo que quiere:
fuente
set -f
) y trata la puntuación como parte de las palabras (que se pueden corregir de manera incómoda agregando caracteres de puntuación aIFS
- buena suerte tratando de admitir conjuntos de caracteres no ASCII). Esto no será bueno con archivos de entrada muy grandes, ya que almacena todo el archivo en la memoria (sort
es más inteligente).Creo que buscas algo como esto?
por supuesto, también puedes hacer lo mismo
awk
:)fuente
Usando
awk/sort/uniq
solución:fuente
ordena ascendente después de dividir el archivo en palabras.
El grep simple encontrará
fish
enfisheye
, por lo que debe mejorar el comando grep para evitar coincidencias parciales.Toma alrededor de 3 segundos para un archivo de texto de 25k en una máquina en las edades, HDD clásico (IDE).
Para archivos más grandes o operaciones realizadas con frecuencia, un enfoque de mapa hash sería mejor, pero para un trabajo que rara vez se ejecuta o solo archivos más pequeños, podría ser suficiente.
fuente