Ricevo l'output da un programma che prima produce una riga che è un gruppo di intestazioni di colonna e quindi un gruppo di righe di dati. Voglio tagliare varie colonne di questo output e visualizzarlo ordinato in base a varie colonne. Senza le intestazioni, il taglio e lo smistamento sono facilmente realizzabili tramite -k
opzione per sort
insieme a cut
o awk
per visualizzare un sottoinsieme delle colonne. Tuttavia, questo metodo di ordinamento combina le intestazioni di colonna con il resto delle righe di output. C'è un modo semplice per mantenere le intestazioni in alto?
Risposta accettata:
Rubare l'idea di Andy e trasformarla in una funzione in modo che sia più facile da usare:
# 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]"
}
Ora posso fare:
$ 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