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