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:
Puede hacerlo fácilmente con los comandos integrados.
sort
. Necesitamos esto para el siguiente paso.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.sort
, que ahora se ordena en orden inverso (r
) y se basa en 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 incorrectos (consulte la ayuda de GNUsort
para obtener más información).head
.El comando sería entonces:
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
:Ejemplo:
Salida del primer comando, pero solo seleccionando 2 de
head
:Salida del segundo comando:
fuente
uniq
.sort -rn
tipo en orden inverso usando como campo de clasificación el número al lado de cada línea producidauniq -c
? Pensé quek1
se usaría algo así o algo asír
invierte yn
ordena numéricamente el número producido poruniq
. ¿A qué te refieres exactamentek1
?man
y entendí que una sintaxis que usa-k
algo debe usarse para elegir el campo por el cual ordenarSi tu distribución tiene logtop
Si su archivo está en constante crecimiento, como un archivo de registro, intente:
fuente