GNU/Linux >> Tutoriales Linux >  >> Linux

¿Ordenar pero mantener la línea de encabezado en la parte superior?

Estoy obteniendo resultados de un programa que primero produce una línea que es un montón de encabezados de columna y luego un montón de líneas de datos. Quiero cortar varias columnas de esta salida y verlas ordenadas según varias columnas. Sin los encabezados, el corte y la clasificación se realizan fácilmente a través de -k opción para sort junto con cut o awk para ver un subconjunto de las columnas. Sin embargo, este método de clasificación mezcla los encabezados de las columnas con el resto de las líneas de salida. ¿Hay alguna manera fácil de mantener los encabezados en la parte superior?

Respuesta aceptada:

Robando la idea de Andy y convirtiéndola en una función para que sea más fácil de usar:

# print the header (the first line of input)
# and then run the specified command on the body (the rest of the input)
# use it in a pipeline, e.g. ps | body grep somepattern
body() {
    IFS= read -r header
    printf '%s\n' "$header"
    "[email protected]"
}

Ahora puedo hacer:

$ ps -o pid,comm | body sort -k2
  PID COMMAND
24759 bash
31276 bash
31032 less
31177 less
31020 man
31167 man
...

$ ps -o pid,comm | body grep less
  PID COMMAND
31032 less
31177 less

Linux
  1. Ordenarse con ordenar en la línea de comando

  2. ¿Mantener solo la primera línea de cada secuencia de líneas consecutivas que coincidan con un patrón?

  3. ¿Eliminar líneas consecutivas en Csv con valores duplicados en un campo, pero conservar la última línea?

  4. Ordenar en el último campo de una línea

  5. ¿Qué es el usuario debian-+?

Uso de less para ver archivos de texto en la línea de comandos de Linux

Cómo usar el comando superior en Linux

Domina la línea de comandos de Linux

Cómo personalizar el comando superior de Linux

¿Cómo dividir un archivo y mantener la primera línea en cada una de las piezas?

¿Cómo iniciar programas GUI Linux desde la línea de comandos, pero separados de la línea de comandos?