Sysop.Fr
Catégories

apache

awk

bash

charmap

date

echo

encoding

find

grep

hexdump

irc

iso3166

ls

mysql

printf

python

read

sed

seq

smpp

sort

tar

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"
}