Exemples pour le langage AWK
# 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 !! "}
}