Cuente cuántas veces aparece cada línea en un archivo

23

Digamos que tengo un archivo que contiene:

A
A
A
B
CC

Quiero tener la salida de esta manera:

A 3
B 1
CC 1
Cheng
fuente

Respuestas:

23

Me lo imaginé; una de uniqlas opciones es -c, para "líneas de prefijo por el número de ocurrencias":

$ uniq -c
Cheng
fuente
1
Tenga en cuenta que pone los números primero. Si fuera quisquilloso con el pedido, podría hacer:uniq -c filename.txt | sed 's/[^0-9]*\\([0-9]\+\\) \\(.*\\)/\2 \1/'
frabjous
12
También tenga en cuenta que solo cuenta las líneas de repetición adyacentes. Un idioma común essort | uniq
Steven D
44
uniq también pone el conteo frente al dato. La pregunta original realmente necesitaría algo como esto: ordenar nombre de archivo | uniq -c | awk '{print $ 2, $ 1}'
Bruce Ediger
En caso de que no esté claro a partir de los comentarios anteriores, debe asegurarse de que los datos se ordenan primero para lograr su objetivo. Si no está ordenado, tendrá entradas repetidas. Por ejemplo, si su archivo original era en su lugar A \ A \ A \ B \ A \ CC, la salida de solo uniq -cse mostraría A 3y luego se mostraría A 1. Ordenar primero, garantizará que todas las líneas idénticas se agrupen juntas
drootang
16

Acabo de llegar aquí con un problema similar. A partir de esto, logré armar un comando un poco más avanzado, que espero sea útil para otros.

Como dijo Steven D en los comentarios anteriores, uniqsolo cuenta las líneas de repetición adyacentes, por lo que primero debe ordenar las líneas. Después de eso, encontramos las líneas únicas y luego ordenamos nuevamente para que las líneas más frecuentes estén en la parte superior.

sort file.txt | uniq -c | sort -nr > output.txt

La salida se redirige al archivo output.txt. Si solo desea ver los resultados en la línea de comando, elimine la redirección y cambie el último comando para sort -nque la línea más común esté en la parte inferior, es decir, definitivamente todavía en la pantalla.

Cabra descontento
fuente
44
Se puede reemplazar cat file.txt | sortcon solo sort file.txt. :)
mattdm
1
@mattdm: la desventaja de esa formulación es que no se puede reemplazar rápidamente catcon algo más interesante. Ya que, ya sabes, no hay cat.
SamB
1
@SamB Luego escríbelo como < file.txt sort | uniq -c. Esto es fácil de editar y aún evita lo innecesario cat.
hvd