![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
Les exemples qui suivent s'attachent à donner un livre de recettes que l'on pourra rutiliser soit au sein d'un script awk soit dans un script bash.
La premire forme de boucle utilise for.
BEGIN { for (i=1; i<=10; i++) print i }
La seconde forme de boucle utilise while.
awk 'BEGIN { i=0 while(i<10) { printf i i++ } }'
les mots cls break et continue permettent de grer les boucles diffrement:
On ne peut pas sortir de deux boucles imbriques grâce à un seul break (ou de faire un continue). Ces mots cls ne fonctionnent que sur la boucle active.
Une manire simple de remplir une table de hashage ou hash est d'utiliser la fonction split sur une chaine de caractre.
BEGIN { split("this is not stored linearly",temp) for (i in temp) print temp[i] }
BEGIN { n = split("ce n est pas stock linairement",temp) for (i=1; i<=n; i++) print i, temp[i] print "" for (i in temp) print i, temp[i] }
On affiche dans l'ordre croissant, puis en ordre décroissant.
1 ce 2 n 3 est 4 pas 5 stock 6 linairement 2 n 3 est 4 pas 5 stock 6 linairement 1 ce
BEGIN { assoc["element1"] = 4 assoc["element2] = 4 assoc["le reste"] = 15 for (i in assoc) print i,assoc[i] }
Pour trier un tableau on peut utiliser une fonction, mais on peut aussi se servir de fonction systeme comme sort.
BEGIN { split("56 566 3 43 99 100",temp," ") for (i in temp) print temp[i] | "sort" while ("sort" | getline) print }
awk '{gsub(/ /,"\n");print}'
awk '{sub(/\r$/,"");print}' # chaque ligne doit se terminer par Ctrl-M
awk '{sub(/$/,"\r");print}
awk '{sub(/^[ \t]+/, ""); print}'
awk '{sub(/[ \t]+$/, "");print}'
awk '{gsub(/^[ \t]+|[ \t]+$/,"");print}' awk '{$1=$1;print}'
awk '{sub(/^/, " ");print}'
awk '!x[$0]++' fichier
affiche les lignes de commentaires
awk '/^#/ {print }' /etc/services
et pour afficher les lignes qui ne sont pas des commentaires
awk '!/^#/ {print }' /etc/services
affiche les lignes impaires
awk 'NR%2' fichier.txt
affiche les lignes impaires
awk '! NR%2' fichier.txt
awk '{sub(/old/,"new");print}' # remplace la 1 ere isubnstance gawk '{$0=gensub(/old/,"new",3);print}' # remplace la 3 eme instance awk '{gsub(/old/,"new");print}' # remplace toutes les instances des lignes
awk '/where/{gsub(/old/, "new")};{print}'
awk '/!where/{gsub(/old/, "new")};{print}'
awk '{gsub(/rouge|vert|bleu/, "couleur"); print}'
awk ' BEGIN {RS = "" } /John/ {print $0,"\n"} ' fichier John 1212
history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | awk '{ printf("%s\t%s\t",$2,$1) ; for (i = 0; i < $1; i++) {printf("*")}; print "" }' 10.12.40.16.58607 1 * 10.40.12.1.5481 1 * 127.0.0.1.32809 1 * 127.0.0.1.32812 1 * 127.0.0.1.32819 1 * 127.0.0.1.4105 16 ****************
* Merci Ruben