Sysop.Fr
Catégories

apache

awk

bash

charmap

date

echo

encoding

find

grep

hexdump

irc

iso3166

ls

mysql

od

openssh

printf

python

read

sed

seq

smpp

sort/uniq

tar

tr

ucp

Articles

Mémo de la commande awk

La commande awk permet de filtrer des données à partir d'un fichier ou d'un pipe. C'est un langage de programmation a elle tout seule qui permet une recherche de chaînes et l'exécution d'actions sur les lignes sélectionnées.

1. Options de la commande awk

-Fdéfinie le délimiteur à utiliser
-fdéfinie le nom de fichier de configuration à utiliser

2. Affiche le 3e champ avec des espaces comme délimiteur

root@ubuntu:~# awk '{print $3}'

3. Affiche 1er champ et 2e champ séparé par ":" avec des virgules comme délimiteur

root@ubuntu:~# awk -F ',' '{print $1":"$2}'

4. Affiche le 3e champ avec des tabulations comme délimiteur

root@ubuntu:~# awk -F '\t' '{print $3}'

5. Affiche le sixième et septième champs du fichier /etc/passwd (avec ":" comme délimiteur)

root@ubuntu:~# awk -F":" '{print $6,$7}' /etc/passwd
/root /bin/bash
/usr/sbin /bin/sh
/bin /bin/sh
/dev /bin/sh
            

6. Affiche les champs en ordre inverse

root@ubuntu:~# echo "a b c d e f" | awk '{for (i=NF; i>0; i--) {printf("%s ",$i)}}'
f e d c b a root@ubuntu:~#

root@ubuntu:~# echo "a b c d e f" | awk '{for (i=NF; i>0; i--) {printf("%s ",$i)} printf "\n"}'
f e d c b a
root@ubuntu:~#
            

7. Autres exemples

root@ubuntu:~# ps ax |grep 'inetd' |awk '{print $1}' |xargs kill

root@ubuntu:~# echo fichier.txt,Lundi,Janvier,5,ABCDEF |awk -F',' '{printf "%s %s %2s %s %s\n",$2,$3,$4,$5,$1}'
Lundi Janvier  5 ABCDEF fichier.txt

root@ubuntu:~# echo fichier.txt,Lundi,Janvier,26,ABCDEF |awk -F',' '{printf "%s %s %2s %s %s\n",$2,$3,$4,$5,$1}'
Lundi Janvier 26 ABCDEF fichier.txt
            

8. Programmer avec awk

root@ubuntu:~# cat fichier.awk
BEGIN {
    print "Démarrage du programme"
}

{ print "Pas de critères. Donc ce message s'affiche autant de fois qu'il y a d'enregistrement" }

END {
    print "Fin du programme"
}


root@ubuntu:~# cat fichier.awk
#! /usr/bin/awk -f
BEGIN {
    print "Analyse du fichier /etc/passwd"
    FS=":" # Changement du séparateur de champ
}
{
    print "User : " $1
    print "Home : " $6
    print ""
}
END {
    print "Fin d'analyse du fichier /etc/passwd"
}


root@ubuntu:~# awk -f fichier.awk /etc/passwd
Analyse du fichier /etc/passwd
User : root
Home : /root

User : daemon
Home : /usr/sbin

User : bin
Home : /bin

User : sys
Home : /dev

User : sync
Home : /bin

User : games
Home : /usr/games
...
Fin d'analyse du fichier /etc/passwd



root@ubuntu:~# cat fichier.awk
#! /usr/bin/awk -f

BEGIN {
    print "Affichage des 7 premières lignes du fichier"
    n = 7
}
NR <= n { print NR, $0 }
END {
    print "Fin"
}