Obtenga las líneas que aparecen más comunes desde un archivo en Linux

Obtenga las líneas que aparecen más comunes desde un archivo en Linux

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 la ninterpretación numérica ( ) de la uniqsalida. Necesitamos la opción numérica ya que de lo contrario, el espacio delante de los números conduciría a resultados erróneos (versortLa 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

información relacionada