Je reçois la sortie d'un programme qui produit d'abord une ligne qui est un tas d'en-têtes de colonne, puis un tas de lignes de données. Je veux couper différentes colonnes de cette sortie et la voir triée selon différentes colonnes. Sans les en-têtes, le découpage et le tri sont facilement accomplis via le -k
option pour sort
avec cut
ou awk
pour afficher un sous-ensemble des colonnes. Cependant, cette méthode de tri mélange les en-têtes de colonne avec le reste des lignes de sortie. Existe-t-il un moyen simple de conserver les en-têtes en haut ?
Réponse acceptée :
Voler l'idée d'Andy et en faire une fonction pour en faciliter l'utilisation :
# 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]"
}
Maintenant je peux faire :
$ 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