Sélectionnez une colonne de texte arbitraire dans UNIX.

UNIX possède des capacités de traitement de texte merveilleusement puissantes. Il existe de nombreuses façons de résoudre le même problème. Souvent, par exemple, il est nécessaire d’extraire une seule colonne de données d’un fichier texte ou d’un flux de sortie. Cette recette technique présentera plusieurs solutions à ce problème.


De nombreux fichiers de données ont des champs de données délimités par un seul caractère, comme une tabulation ou des deux points. Pour extraire le champ de nom complet de / etc / passwd, le cinquième champ délimité par des deux-points, utilisez:

cut -d: -f 5 / etc / passwd

La commande cut permet une grande flexibilité dans la découpe des données. Dans ce cas, le -ré : ordonne à couper d’utiliser un caractère deux-points comme délimiteur. le -f 5 le paramètre dirige cut pour extraire uniquement le cinquième champ. Le paramètre de champ rend la coupe extrêmement flexible. D'autres exemples sont -f 2-5 extraire les champs 2 à 5, -f 1,3,7 extraire les premier, troisième et septième champs.

Pour extraire un ensemble fixe de colonnes, par exemple les numéros de colonne 44 à 49 d'une liste de répertoires longue (ls -l), utilisez la commande suivante:

ls -l | couper -c 44-49

Sur de nombreux systèmes UNIX, ces colonnes représentent la date de modification. Comme le paramètre -f, le paramètre -c peut accepter des valeurs alternatives telles que -c 5,7,6,8 présentera ces positions de personnage dans cet ordre.

L'une des opérations d'extraction de colonne les plus complexes implique la présence d'une quantité variable d'espaces entre les champs. Pour extraire le champ id du processus (deuxième) d'une liste de processus (ps -ef), couper ne fonctionnera pas. Awk est un autre puissant manipulateur de texte sous UNIX, qui comprend que plusieurs espaces doivent être comptés comme un seul espace blanc. Pour extraire le pid d'un ps -ef, utilisez:

ps -ef | tête awk '{print $ 2}'

Awk est un outil incroyablement puissant, et son application est triviale mais utile.