Awk

Rédigé le 21 février 2017. Étiquettes : shell

awk est une commande complexe mais puissante. Du coup je lui consacre maintenant une page dédiée.

Filtrer les lignes

On peut avoir pour habiture de chaîner cat et grep avant d'utiliser awk, mais c'est inutile.

En effet, il est possible de tout faire avec awk, ce qui est bien plus efficace.

Par exemple, on peut remplacer :

cat mon_fichier | grep toto | awk '{ print $1 }'

par :

awk '/toto/ { print $1 }' mon_fichier

Filtrer les lignes, en fonction d'un champ

Il est possible d'utiliser les _REGEX_ ou te faire de la comparaison de chaîne simple sur un champ particulier.

Exemple pour afficher les process zombies de la machine (et le père) :

ps -elf | awk '$2 ~ /Z/ {print $2 " : " $4 " - PPID : " $5}'
# ou bien
ps -elf | awk '$2 == "Z" {print $2 " : " $4 " - PPID : " $5}'

Séparateur

Pour changer le séparateur de champ, il existe deux moyens.

Méthode 1

Utiliser l'argument -F en lui donnant le caractère de séparation.

Exemple :

awk -F ';' '{print $7}' fichier.csv

Méthode 2

Un peu plus long, mais utile dans le cas d'un script en pur awk :

ajouter BEGIN { FS = "REGEX" } avant le motif d'extraction.

Exemple, pour extraire le 7è champ d'un CSV délimité par des points-virgules :

awk 'BEGIN { FS = ";" } ; {print $7}' fichier.csv

Notez que la variable FS (interne à awk) n'a rien à voir avec IFS de votre shell.

-------------------------------

← Plus récent : Le thème s'assombrit

→ Plus ancien : Faire un dépôt/miroir pip local

Aléatoire : Erreur REF_NOT_FOUND avec Hugo

Retour à l'accueil

Contenu sous licence CC-BY-SA