Exemples pour le langage AWK

Textes écrits par Gilles HUNAULT


# Xmp1.Awk : numérotation des lignes d'un fichier

{ print NR, $0 }

# Xmp2.Awk : numérotation cadrée des lignes d'un fichier

(FNR==1) { print "Fichier " , FILENAME } { printf("%5d : ", FNR) } { print }

# Xmp3.Awk : détection simple de chaine

BEGIN { print "Voici toutes les lignes qui contiennent la chaine 40" } /40/ { print FILENAME , FNR , $0 }

# Xmp4.Awk : détection par expression régulière

/.*[Ee].*4/ { print FILENAME , FNR , $0 } END { print "Vous avez vu les lignes qui contient un e " print "puis des caractères quelconques puis un 4 " }

# Xmp5.Awk : un bonjour amélioré

BEGIN { ARGV[1] = "" print "Bonjour " ; printf "Quel est votre nom ? " "read" | getline pren if (pren="") { pren = "bel inconnu" } pren = "bel inconnu" "date " | getline date = $3 " " $2 " " $NF ; heure = substr($4,1,5) print "Le " date " à " heure " au revoir, " toupper(pren) } # 5

# Xmp6.Awk : table de multiplication

BEGIN{ printf(" De quel nombre voulez-vous la table ? ") # getline nb < "CON" nb = 5 printf(" Table de multiplication de %2d\n\n" , nb ) # # for (r=1 ; r<=10 ; r++) { produit = r * nb printf( "%2d fois %2d = %6d\n" , r , nb , produit ) } } # 6

# Xmp7.Awk : moyenne de classe

BEGIN { for (iar=1;iar<=ARGC;iar++) { ARGV[iar]= "" } ARGV[1] = "Classe.Xmp" } { elv ++ ; nom[elv] = $1 ; for (n=1;n<=3;n++) { note[elv,n] = $n } moy[elv] = ($1 + $2 + $3) / 3 } END { nbelv = elv ; print " On a vu " , nbelv , " élèves " for (e=1;e<=nbelv;e++) { printf("\n%-15s %5.2f", nom[e] , moy[e] ) } ; print "" } # 7

# Xmp8.Awk : un petit dictionnaire

BEGIN { for (iar=1;iar<=ARGC;iar++) { ARGV[iar]= "" } ARGV[1] = "Texte.Xmp" } (NF>0) { nbl++ } { nbm+=NF ; for (m=1;m<=NF;m++) { dic[$m]++ } } END { msg = "On a vu " nbm " mots sur " nbl " lignes -" printf msg ; printf " Appuyez sur Enter " ; getline < "CON" system("cls") for (m in dic) { printf("\n%-15s %4d",m,dic[m]) } print "" } # 8

# Xmp9.Awk : gestion de répertoire

BEGIN { fs="DIR.DIR" ; system("ls -al > " fs) ; close(fs) ; nbf = 0 for (iar=1;iar<=ARGC;iar++) { ARGV[iar]= "" }; ARGV[1] = fs } /-/ && $1 !~ /^d/ && $9 != "DIR.DIR" { ip = index($9,".") if (ip > 0) { ext = substr($9,1+ip) } else { ext = "???" } tot[ext] += $5 ; nb[ext] ++ ; nbf++} END { print " ext nb_fich cumul_taille" for (ext in tot) printf ("%-15s %3d %12d\n" , ext , nb[ext] , tot[ext] ) system("rm " fs) if (nbf==0) { print " mais je n'ai vu aucun fichier !! "} }