Obtenga las líneas de archivo más comunes en Linux


11

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 mi conocimiento sobre los comandos, ¡sería genial!


Respuestas:


21

Puede hacerlo fácilmente con los comandos integrados.

  • Alimenta el contenido del archivo sort. Necesitamos esto para el siguiente paso.
  • Esto va a uniq -c. Contará la ocurrencia única de cada línea. Si las líneas similares no son adyacentes, esto no habría funcionado sin ordenar antes.
  • Luego, aliméntelo a otro sort, que ahora se ordena en orden inverso ( r) y se basa en 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 incorrectos (consulte la ayuda de GNUsort para obtener más información).
  • Finalmente, solo muestre las primeras doce líneas con head.

El comando sería entonces:

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!

1
Tienes que ordenarlo antes de usarlo uniq.
cYrus

@slhck: ¡Gracias! Una pregunta: ¿El sort -rntipo en orden inverso usando como campo de clasificación el número al lado de cada línea producida uniq -c? Pensé que k1se usaría algo así o algo así
Jim

@Jim Exactamente. rinvierte y nordena numéricamente el número producido por uniq. ¿A qué te refieres exactamente k1?
slhck

@slhck: estaba tratando de resolver estos comandos usando many entendí que una sintaxis que usa -kalgo debe usarse para elegir el campo por el cual ordenar
Jim

@cYrus: ¿Cuál es el caso límite que se necesita una clasificación de antemano?
Jim

3

Si tu distribución tiene logtop

cat your_file | logtop

Si su archivo está en constante crecimiento, como un archivo de registro, intente:

tail -f your_log | logtop
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.