Dostávám výstup z programu, který nejprve vytvoří jeden řádek, který je hromadou záhlaví sloupců, a poté hromadu řádků dat. Chci vyjmout různé sloupce tohoto výstupu a zobrazit jej seřazené podle různých sloupců. Bez hlaviček lze řezání a třídění snadno provést pomocí -k
možnost sort
spolu s cut
nebo awk
pro zobrazení podmnožiny sloupců. Tento způsob řazení však míchá záhlaví sloupců se zbytkem řádků výstupu. Existuje snadný způsob, jak ponechat záhlaví nahoře?
Přijatá odpověď:
Ukrást Andyho nápad a udělat z něj funkci, aby se snáze používal:
# 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]"
}
Teď můžu:
$ 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