Exemples de scripts Awk

Droits : modification de la sortie d'un ls -l (symbolique vers octal):
  Fichier script droits.awk :
# Nicolas Pons (19/11/2004)
# Modifie l'affichage des droits Unix dans un `ls -l`.
# La notation symbolique est remplacée par de l'octal.
#
# Usage : ls -l | awk -f [ce fichier]

BEGIN {
        # Suppression de la 1ère ligne contenant "total" dans 
        # l'affichage du `ls -l`
        getline
        # Ajout d'une ligne d'entête
        print "---------- Début traitement AWK ----------"
}
{
        # Conversion notation symbolique -> octal
        gsub(/rwx/,7,$1)
        gsub(/rw-/,6,$1)
        gsub(/r-x/,5,$1)
        gsub(/r--/,4,$1)
        gsub(/-wx/,3,$1)
        gsub(/-w-/,2,$1)
        gsub(/--x/,1,$1)
        gsub(/---/,0,$1)
        # Affichage du résultat
        print $0
}
END {
        # Ajout d'une ligne en fin de traitement
        print "----------- Fin traitement AWK -----------"
}
Exemple d'exécution :
$ ls -l
total 32
-rw-r--r--    1 nicolas  users         816 Mar  2 11:14 droits.awk
-rw-r--r--    1 nicolas  users         570 Mar  2 11:13 droits.sed
-rw-r--r--    1 nicolas  users          81 Dec  6 16:12 fic1
-rw-r--r--    1 nicolas  users         119 Dec  6 16:15 fic2
-rw-r--r--    1 nicolas  users           7 Dec  6 15:25 fichier2
lrwxrwxrwx    1 nicolas  users           8 Dec  6 15:26 fichier3 -> fichier1
-rw-r--r--    1 nicolas  users          90 Mar  2 10:58 numeros
drwxr-xr-x    2 nicolas  users        4096 Dec  6 15:46 rep
drwxr-xr-x    3 nicolas  users        4096 Dec  6 16:52 ttt
$ ls -l | awk -f droits.awk 
---------- Début traitement AWK ----------
-644 1 nicolas users 816 Mar 2 11:14 droits.awk
-644 1 nicolas users 570 Mar 2 11:13 droits.sed
-644 1 nicolas users 81 Dec 6 16:12 fic1
-644 1 nicolas users 119 Dec 6 16:15 fic2
-644 1 nicolas users 7 Dec 6 15:25 fichier2
l777 1 nicolas users 8 Dec 6 15:26 fichier3 -> fichier1
-644 1 nicolas users 90 Mar 2 10:58 numeros
d755 2 nicolas users 4096 Dec 6 15:46 rep
d755 3 nicolas users 4096 Dec 6 16:52 ttt
----------- Fin traitement AWK -----------
Sélection : Affichage de la ligne n à la ligne m incluses du contenu d'un fichier
  Exemple : affichage des lignes 198 à 201 du fichier /etc/services
$ awk 'NR>=198 && NR <=201{print}' /etc/services
ircs            994/tcp                         # IRC over SSL
ircs            994/udp                         # IRC over SSL
pop3s           995/tcp                         # POP-3 over SSL
pop3s           995/udp                         # POP-3 over SSL
   

Retour à l'accueil