
Tengo un archivo de texto que tiene varias palabras por línea.
¿Cómo puedo encontrar las 12 líneas que aparecen con más frecuencia en el archivo y mostrarlas?
No soy muy bueno con los comandos de secuencias de comandos.
Si pudiera obtener el comando y una explicación para poder entender cómo usarlo y ampliar mis conocimientos sobre los comandos, ¡sería genial!
Respuesta1
Puede hacer esto fácilmente con los comandos integrados.
- Alimente el contenido del archivo
sort
. Necesitamos esto para el siguiente paso. - Esto va a
uniq -c
. Contará la aparición única de cada línea. Si las líneas similares no son adyacentes, esto no habría funcionado sin ordenar antes. - Luego, envíelo a otro
sort
, que ahora lo clasifica en orden inverso (r
) y según lan
interpretación numérica ( ) de launiq
salida. Necesitamos la opción numérica ya que de lo contrario, el espacio delante de los números conduciría a resultados erróneos (versort
La ayuda de GNUpara más). - Finalmente, muestra solo las primeras doce líneas con
head
.
El comando entonces sería:
sort test.txt | uniq -c | sort -rn | head -n 12
La salida aquí contiene el recuento real de las ocurrencias.
Para obtener solo la lista sin formato de líneas, puede canalizar la salida a sed
:
sort test.txt | uniq -c | sort -rn | head -n 12 | sed -E 's/^ *[0-9]+ //g'
Ejemplo:
I'm not there very often
I'm not there very often
Look at me!
Look at me!
Look at me!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!
Salida del primer comando, pero solo seleccionando 2 de head
:
6 Hello there!
3 Look at me!
Salida del segundo comando:
Hello there!
Look at me!
Respuesta2
Si tu distro tieneinicio de sesión
cat your_file | logtop
Si su archivo crece constantemente, como un archivo de registro, intente:
tail -f your_log | logtop