informatique:linux:awk
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| informatique:linux:awk [2010/05/05 09:33] – pteu | informatique:linux:awk [2025/02/17 14:14] (current) – [Exemples] case-insensitive search pteu | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | {{tag> | ||
| - | |||
| - | |||
| ======awk====== | ======awk====== | ||
| Line 22: | Line 19: | ||
| ====Les options==== | ====Les options==== | ||
| - | * '' | + | * '' |
| + | <code bash> | ||
| + | vi test.awk | ||
| + | BEGIN{FS=";"; | ||
| + | $0 ~ " | ||
| + | :x | ||
| + | |||
| + | awk -f test.awk fichier.txt | ||
| + | ceci est un test | ||
| + | </ | ||
| * '' | * '' | ||
| - | < | + | < |
| echo " | echo " | ||
| toto tata titi | toto tata titi | ||
| </ | </ | ||
| * '' | * '' | ||
| - | < | + | < |
| HOST=toto ; echo titi | awk -v h=$HOST ' | HOST=toto ; echo titi | awk -v h=$HOST ' | ||
| | | ||
| + | </ | ||
| + | |||
| + | Autre façon de passer des variables dans un fichier de script : | ||
| + | <code bash> | ||
| + | vi test.awk | ||
| + | BEGIN{FS=";"; | ||
| + | $0 ~ rechch {print $0} | ||
| + | :x | ||
| + | |||
| + | awk -f test.awk rechch=test fichier.txt | ||
| + | ceci est un test | ||
| </ | </ | ||
| ====Les variables prédéfinies==== | ====Les variables prédéfinies==== | ||
| - | ''< | + | ^ Variable ^ Description |
| - | * '' | + | | ARGC | nombre |
| - | * '' | + | | ARGV | tableau des arguments de la ligne de commande |
| - | * '' | + | | FILENAME |
| - | | + | | ENVIRON |
| - | * '' | + | | FNR | nombre |
| - | * '' | + | | FS | séparateur |
| - | * '' | + | | NF | nombre de champs de l' |
| - | * '' | + | | NR | nombre d' |
| - | * '' | + | | OFMT | format de sortie des nombres |
| - | * '' | + | | OFS | séparateur |
| - | | + | | ORS | séparateur |
| - | * '' | + | | RLENGTH |
| - | * '' | + | | RS | séparateur |
| - | * '' | + | | RSTART |
| + | | SUBSEP | ||
| - | ====Les fonctions==== | + | ====Les fonctions |
| - | Les paramètres sont soit des chaines de caractère | + | Les paramètres sont soit des chaines de caractères |
| * '' | * '' | ||
| * '' | * '' | ||
| Line 63: | Line 81: | ||
| * '' | * '' | ||
| * '' | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ===Le cas printf=== | ||
| + | |||
| + | **printf** et ses dérivées sont des fonctions d' | ||
| + | <code bash> | ||
| + | # afficher les logins et description des utilisateurs locaux qui utilisent le shell /bin/bash | ||
| + | # en alignant les logins à droite et sur 20 caractères | ||
| + | awk -F: '$7 ~ / | ||
| + | root root | ||
| + | dude a dude | ||
| + | robert | ||
| + | |||
| + | # puisque l' | ||
| + | # on utilise l' | ||
| + | awk -F: 'BEGIN {printf "%-20s %s\n", " | ||
| + | login: | ||
| + | root root | ||
| + | dude a dude | ||
| + | robert | ||
| + | |||
| + | # on peut même définir un format d' | ||
| + | awk -F: 'BEGIN {format = "%-20s %s\n"; printf format, " | ||
| + | login: | ||
| + | --- --- | ||
| + | root root | ||
| + | dude a dude | ||
| + | robert | ||
| + | |||
| + | # la même commande, en plus lisible : | ||
| + | awk -F: 'BEGIN {format = "%-10s %s\n" | ||
| + | printf format, " | ||
| + | printf format, " | ||
| + | $7 ~ / | ||
| + | </ | ||
| + | |||
| + | ====Les fonctions mathématiques==== | ||
| + | |||
| + | cos(x), exp(x), int(x), log(x), sin(x), sqrt(x), atan2(x,y), rand(x), srand(x) | ||
| ====Exemples==== | ====Exemples==== | ||
| * imprime chaque ligne du fichier /etc/passwd après avoir effacé le deuxième champs | * imprime chaque ligne du fichier /etc/passwd après avoir effacé le deuxième champs | ||
| - | < | + | < |
| awk -F ":" | awk -F ":" | ||
| </ | </ | ||
| * imprime le nombre total de lignes du fichiers | * imprime le nombre total de lignes du fichiers | ||
| - | < | + | < |
| awk 'END {print NR}' /etc/passwd | awk 'END {print NR}' /etc/passwd | ||
| </ | </ | ||
| * lire la 3ème ligne d'un fichier : | * lire la 3ème ligne d'un fichier : | ||
| - | < | + | < |
| awk '{if (NR==3) print}' | awk '{if (NR==3) print}' | ||
| </ | </ | ||
| * imprime le dernier champs de chaque ligne | * imprime le dernier champs de chaque ligne | ||
| - | < | + | < |
| awk ' | awk ' | ||
| </ | </ | ||
| * imprime le login et le temps de connexion. | * imprime le login et le temps de connexion. | ||
| - | < | + | < |
| who | awk ' | who | awk ' | ||
| </ | </ | ||
| * imprime les lignes de plus de 75 caractères. ('' | * imprime les lignes de plus de 75 caractères. ('' | ||
| - | < | + | < |
| awk ' | awk ' | ||
| </ | </ | ||
| * tests sur le fichier /etc/passwd : | * tests sur le fichier /etc/passwd : | ||
| - | < | + | < |
| awk 'BEGIN { print " | awk 'BEGIN { print " | ||
| print "- les utilisateurs avec UID = 0 " ; | print "- les utilisateurs avec UID = 0 " ; | ||
| Line 109: | Line 168: | ||
| * supprimer le suffixe du domaine d'un nom de machine : | * supprimer le suffixe du domaine d'un nom de machine : | ||
| - | < | + | < |
| echo " | echo " | ||
| </ | </ | ||
| + | * afficher les blocs de texte du fichier FIC.txt compris entre les balises BEGIN et END : | ||
| + | <code bash> | ||
| + | awk '/ | ||
| + | </ | ||
| + | |||
| + | * supprimer (ne pas afficher) les doublons de lignes dans un fichier : | ||
| + | <code bash> | ||
| + | awk ' | ||
| + | </ | ||
| + | |||
| + | * quitter la boucle awk après le premier match | ||
| + | <code bash> | ||
| + | echo -e " | ||
| + | toto | ||
| + | </ | ||
| + | |||
| + | * émuler la fonction trim (efface les espaces avant et après une chaine) : | ||
| + | <code bash> | ||
| + | echo -e " | ||
| + | awk -F\: '{ sub(/^[ \t\r\n]+/, "", | ||
| + | </ | ||
| + | |||
| + | * ne pas afficher les lignes en doublon | ||
| + | <code bash> | ||
| + | # count s' | ||
| + | awk ' | ||
| + | </ | ||
| + | |||
| + | * compter le nombre de caractère dans une ligne (k pour l' | ||
| + | <code bash> | ||
| + | echo $ligne | awk -F' | ||
| + | </ | ||
| + | |||
| + | * N' | ||
| + | <code bash> | ||
| + | awk ' | ||
| + | </ | ||
| + | |||
| + | * filtrer sans tenir compte de la casse (minuscule/ | ||
| + | <code bash> | ||
| + | echo " | ||
| + | TOTO | ||
| + | </ | ||
informatique/linux/awk.1273051980.txt.gz · Last modified: 2013/10/14 20:54 (external edit)