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

Respuestas:


23

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

$ uniq -c

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.