Ich erhalte eine Ausgabe von einem Programm, das zuerst eine Zeile mit einer Reihe von Spaltenüberschriften und dann eine Reihe von Datenzeilen erzeugt. Ich möchte verschiedene Spalten dieser Ausgabe ausschneiden und nach verschiedenen Spalten sortiert anzeigen. Ohne die Header wird das Schneiden und Sortieren einfach über das -k
bewerkstelligt Option zum sort
zusammen mit cut
oder awk
, um eine Teilmenge der Spalten anzuzeigen. Bei dieser Sortiermethode werden jedoch die Spaltenüberschriften mit den restlichen Ausgabezeilen gemischt. Gibt es eine einfache Möglichkeit, die Kopfzeilen oben zu halten?
Akzeptierte Antwort:
Andys Idee stehlen und sie zu einer Funktion machen, damit sie einfacher zu verwenden ist:
# 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]"
}
Jetzt kann ich:
$ 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