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!

Jim
fuente
stackoverflow.com/questions/16922357/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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!
slhck
fuente
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
Julien Palard
fuente