GNU/Linux >> Tutoriels Linux >  >> Linux

Trier mais garder la ligne d'en-tête en haut ?

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

Linux
  1. Compter les caractères de chaque ligne avec Wc ?

  2. Conserver uniquement la première ligne de chaque séquence de lignes consécutives correspondant à un motif ?

  3. Supprimer les lignes d'en-tête supplémentaires du fichier, à l'exception de la première ligne ?

  4. Tri sur le dernier champ d'une ligne

  5. Comment démarrer des programmes Linux GUI à partir de la ligne de commande, mais séparément de la ligne de commande ?

Utilisation de less pour afficher les fichiers texte sur la ligne de commande Linux

Comment utiliser la commande top sous Linux

Maîtrisez la ligne de commande Linux

Comment personnaliser la commande Linux top

Comment scinder un fichier et conserver la première ligne dans chacun des morceaux ?

Qu'est-ce que l'utilisateur debian-+ ?