awk¶
https://www.grymoire.com/Unix/Awk.html
$ cat test.txt
ubuntu Linux
mint Linux
debian Linux
raspbian Linux
mojave macOS
sierra macOS
tiger macOS
snowleopard macOS
Colonnes:¶
Afficher la 1ere colonne d'un fichier:
$ awk '{print $1}' test.txt
ubuntu
mint
debian
raspbian
mojave
sierra
tiger
snowleopard
Afficher la 2eme colonne d'un fichier:
$ awk '{print $2}' test.txt
Linux
Linux
Linux
Linux
macOS
macOS
macOS
macOS
Afficher la 1ere colonne d'un fichier, excepté la 1ere ligne (header):
$ awk 'NR!=1{print $1}' test.txt
mint
debian
raspbian
mojave
sierra
tiger
snowleopard
# NR!=n° de ligne
Afficher le fichier entier:
$ awk '{print $0}' test.txt
ubuntu Linux
mint Linux
debian Linux
raspbian Linux
mojave macOS
sierra macOS
tiger macOS
snowleopard macOS
# commande identique:
$ awk '1' test.txt
Fichier avec séparateur:
$ cat test.csv
ubuntu,Linux
mint,Linux
debian,Linux
raspbian,Linux
mojave,macOS
sierra,macOS
tiger,macOS
snowleopard,macOS
Afficher la 1ere colonne d'un fichier:
il faut spécifier le séparateur:
$ awk -F"," '{print $1}' test.csv
ubuntu
mint
debian
raspbian
mojave
sierra
tiger
snowleopard
# idem, autre commande:
# FS (Field Separator)
$ awk '{print $2}' FS="," test.csv
Linux
Linux
Linux
Linux
macOS
macOS
macOS
macOS
Afficher les colonnes 1 et 2:
$ awk -F"," '{print $1, $2}' test.csv
ubuntu Linux
mint Linux
debian Linux
raspbian Linux
mojave macOS
sierra macOS
tiger macOS
snowleopard macOS
Afficher les colonnes 1 et 2, avec un séparateur:
# OFS (Output Field Separator)
$ awk -F"," '{print $1, $2}' OFS=";" test.csv
ubuntu;Linux
mint;Linux
debian;Linux
raspbian;Linux
mojave;macOS
sierra;macOS
tiger;macOS
snowleopard;macOS
Afficher la dernière colonne:
$ awk -F"," '{print $NF}' test.csv
Linux
Linux
Linux
Linux
macOS
macOS
macOS
macOS
Afficher l'avant-dernière colonne:
$ awk -F"," '{print $(NF - 1)}' test.csv
ubuntu
mint
debian
raspbian
mojave
sierra
tiger
snowleopard
Trim toute la colonne:
$ awk '{$1=$1;print}'
Supprimer la 1ere colonne:
$ awk '{$1=""; print $0}'
# les 3 premières colonnes
$ awk '{$1=$2=$3=""; print $0}'
Supprimer la dernière colonne:
$ awk -F"/" 'BEGIN{OFS=FS} {NF--; print}'
Lignes:¶
Afficher la 3eme ligne:
$ awk 'NR==3' test.txt
mint
$ awk 'FNR == 3 {print}'
Afficher les ligne 2 à 4:
$ awk 'NR>=2 && NR<=4' test.txt
ubuntu
mint
debian
Afficher 4e colonne de la 2e ligne:
$ awk 'NR==2{print $4}'
Supprimer les lignes vides:
$ awk NF
Nombre de lignes:
$ awk 'END { print NR }' test.txt
Supprimer tout après la 1ere ligne vide:
$ awk '/^$/{exit} 1'
Divers:¶
Passer un argument à awk:
$ x=3
$ awk '{print $0,val}' OFS=, val=$x test.csv
ubuntu,Linux,3
mint,Linux,3
debian,Linux,3
raspbian,Linux,3
mojave,macOS,3
sierra,macOS,3
tiger,macOS,3
snowleopard,macOS,3
$ export x
$ awk '{print $0,ENVIRON["x"]}' OFS=, test.csv
ubuntu,Linux,3
mint,Linux,3
debian,Linux,3
raspbian,Linux,3
mojave,macOS,3
sierra,macOS,3
tiger,macOS,3
snowleopard,macOS,3
Dernière mise à jour:
July 25, 2021