Bases
Lancer AWK
awk '{ print }' file.txt # afficher chaque ligne awk '{ print $1 }' file.txt # afficher le premier champ awk -F: '{ print $1 }' /etc/passwd # délimiteur personnalisé awk -f script.awk file.txt # exécuter depuis un fichier cmd | awk '{ print $2 }' # entrée via pipe
Structure du programme
awk 'pattern { action }'Forme de base — l'action s'exécute quand le motif correspond
BEGIN { ... }Exécuté une fois avant le traitement
END { ... }Exécuté une fois après tout le traitement
Sans motifL'action s'exécute pour chaque ligne
Sans actionAction par défaut : { print }
Motifs et actions
Types de motifs
awk '/error/' file.txt # correspondance regex awk '$3 > 100' file.txt # comparaison awk 'NR >= 5 && NR <= 10' file.txt # plage de lignes awk '/start/,/end/' file.txt # motif de plage
Référence des motifs
/regex/Faire correspondre la ligne à une regex
$1 ~ /pat/Le champ correspond à la regex
$1 !~ /pat/Le champ ne correspond pas à la regex
expr1, expr2Plage : de la première à la deuxième correspondance
expr1 && expr2ET logique
expr1 || expr2OU logique
!exprNON logique
Variables
Variables intégrées
NRNuméro d'enregistrement (ligne) courant
NFNombre de champs dans l'enregistrement courant
FSSéparateur de champ en entrée (défaut : espace)
OFSSéparateur de champ en sortie (défaut : espace)
RSSéparateur d'enregistrement en entrée (défaut : saut de ligne)
ORSSéparateur d'enregistrement en sortie (défaut : saut de ligne)
FILENAMENom du fichier d'entrée courant
FNRNuméro d'enregistrement dans le fichier courant
Variables utilisateur
awk '{ total += $1 } END { print total }' file.txt awk -v threshold=50 '$1 > threshold' file.txt awk 'BEGIN { count = 0 } /pat/ { count++ } END { print count }' file.txt
Champs
Accès aux champs
$0Ligne entière courante
$1, $2, ...Premier, deuxième, ... champ
$NFDernier champ
$(NF-1)Avant-dernier champ
Séparateurs de champs
awk -F, '{ print $2 }' data.csv # virgule awk -F'\t' '{ print $1 }' data.tsv # tabulation awk 'BEGIN { FS = "[,:]" } { print $1 }' f # multi-car awk 'BEGIN { OFS = "," } { print $1, $3 }' f # sep sortie
Flux de contrôle
Conditions et boucles
awk '{ if ($1 > 50) print "high"; else print "low" }' f awk '{ for (i = 1; i <= NF; i++) print $i }' f awk '{ i = 1; while (i <= NF) { print $i; i++ } }' f awk '/skip/ { next } { print }' f # ignorer les lignes correspondantes
Instructions de contrôle
if (cond) { ... } else { ... }Condition
for (i = 0; i < n; i++) { ... }Boucle for style C
for (key in array) { ... }Itérer sur les clés d'un tableau
while (cond) { ... }Boucle while
do { ... } while (cond)Boucle do-while
nextPasser à l'enregistrement suivant
exitArrêter le traitement, exécuter le bloc END
Fonctions
Fonctions définies par l'utilisateur
awk 'function max(a, b) { return (a > b) ? a : b } { print max($1, $2) }' file.txt
Fonctions numériques
int(x)Tronquer vers l'entier
sqrt(x)Racine carrée
sin(x), cos(x)Fonctions trigonométriques
log(x), exp(x)Logarithme naturel et exponentielle
rand()Flottant aléatoire entre 0 et 1
srand(seed)Initialiser le générateur de nombres aléatoires
Tableaux
Tableaux associatifs
awk '{ count[$1]++ } END { for (k in count) print k, count[k] }' f awk '{ arr[NR] = $0 } END { for (i = NR; i >= 1; i--) print arr[i] }' f
Opérations sur les tableaux
arr[key] = valDéfinir un élément
arr[key]Lire un élément (créé automatiquement à l'accès)
key in arrVérifier si la clé existe
delete arr[key]Supprimer un élément
delete arrSupprimer tout le tableau
for (k in arr)Itérer sur les clés (ordre non défini)
length(arr)Nombre d'éléments (gawk)
Fonctions de chaînes
Référence des fonctions de chaînes
length(s)Longueur de la chaîne
substr(s, start, len)Sous-chaîne (indexée à 1)
index(s, target)Position de target dans s (0 si absent)
split(s, arr, sep)Découper une chaîne en tableau
sub(pat, repl, s)Remplacer la première occurrence
gsub(pat, repl, s)Remplacer toutes les occurrences
match(s, pat)Position de la correspondance regex (définit RSTART, RLENGTH)
tolower(s) / toupper(s)Conversion de casse
sprintf(fmt, ...)Formater une chaîne (comme printf en C)
Exemples de chaînes
awk '{ gsub(/old/, "new"); print }' f # remplacement style sed awk '{ print toupper($0) }' f # tout en majuscules awk '{ print substr($0, 1, 40) }' f # tronquer à 40 caractères
E/S
Sortie
awk '{ print $1, $2 }' f # séparé par des espaces awk '{ printf "%s,%d\n", $1, $2 }' f # sortie formatée awk '{ print $1 > "out.txt" }' f # rediriger vers un fichier awk '{ print $1 >> "out.txt" }' f # ajouter à un fichier
Référence E/S
printAfficher avec ORS (saut de ligne par défaut)
printf fmt, ...Affichage formaté (sans saut de ligne final)
print > fileRediriger la sortie vers un fichier
print >> fileAjouter la sortie à un fichier
print | cmdEnvoyer la sortie vers une commande
getline < fileLire une ligne depuis un fichier
cmd | getline varLire la sortie d'une commande dans une variable
close(file)Fermer un fichier ou un pipe
Patterns courants
Raccourcis
awk '{ sum += $1 } END { print sum }' f # sommer une colonne awk 'END { print NR }' f # compter les lignes awk '!seen[$0]++' f # supprimer les doublons awk 'NF' f # supprimer les lignes vides awk '{ print NF }' f # champs par ligne
Recettes
CSV vers TSVawk -F, 'BEGIN{OFS="\t"} {$1=$1; print}'
Somme colonne 2awk '{ s += $2 } END { print s }'
N premières lignesawk 'NR <= 10' (comme head)
Comptage de fréquencesawk '{ c[$1]++ } END { for (k in c) print k, c[k] }'
Entre des marqueursawk '/BEGIN/,/END/'
Afficher le N-ième champawk '{ print $N }' (remplacer N)