Dans cet article, je vous propose de découvrir l’utilisation de awk (en ligne de commande, et non en script) pour lire ou analyser des fichiers, texte ou CSV, contenant plusieurs délimiteurs ou séparateurs.
Prenons comme exemple ce fichier texte (Prénom, département, mois, jour de naissance, nombre de frères, nombre de sœurs) :
$ cat fichier.txt Sarah:69:03;08;2013;0;0 Emilie:63:06;18;1981;0;1 Mehdi:69:09;16;1974;1;0 Edouard:69:03;27;1989;3;0
1. Pour imprimer la 3ème colonne contenant la date de naissance :
$ awk -F':' '{print $3}' fichier.txt 03;08;2013 06;18;1981 09;16;1974 03;27;1989
2. Pour imprimer le mois de naissance, la 3ème colonne tout séparateur confondu :
$ awk -F '[:;]' '{print $3}' fichier.txt 03 06 09 03
En précisant -F'[:;]’ nous précisons à awk que les délimiteurs sont les caractère ‘:‘ et ‘;‘ .
3. Ajouter des variables, savoir combien de frères et sœurs ont les personnes :
$ awk -F '[;:]' '{$2=$6+$7;print $1,$2}' OFS=: fichier.txt Sarah:0 Emilie:1 Mehdi:1 Edouard:3
On demande à awk de faire l’addition entre frères et sœurs, et on affiche le résultat.
4. Grouper / Dégrouper des variables en affichant plusieurs lignes pour la même personne :
$ awk -F '[;:]' '{for(i=3;i<=5;i++){print $1,$2,$i;}}' OFS=:fichier.txt Sarah:69:03 Sarah:69:08 Sarah:69:2013 Emilie:63:06 Emilie:63:18 Emilie:63:1981 Mehdi:69:09 Mehdi:69:16 Mehdi:69:1974 Edouard:69:03 Edouard:69:27 Edouard:69:1989
Nous avons donc pour chaque personne une ligne avec le mois, le jour et l’année de naissance.
5. Utiliser les variables spéciales :
$ awk -F '[;:]' '{print $1 " a " $NF " soeur."}'fichier.txt Sarah a 0 soeur. Emilie a 1 soeur. Mehdi a 0 soeur. Edouard a 0 soeur.
Les variables prédéfinies :
ARGC Nombre d’arguments de la ligne de commande
ARGV tableau des arguments de la ligne de commande-
FILENAME nom du fichier sur lequel on applique les commandes
FNR Nombre d’enregistrements du fichier
FS separateur de champs en entrée
NF nombre de champs de l’enregistrement courant
NR nombre d’enregistrements deja lu
OFMT format de sortie des nombres
OFS separateur de champs pour la sortie
ORS separateur d’enregistrement pour la sortie
RLENGTH longueur de la chaine trouvée
RS separateur d’enregistrement en entrée
RSTART debut de la chaine trouvée
SUBSEP separateur de subscript
Amusez-vous bien!!
4 commentaires
Pingback: exemple de fichier awk
Pingback: exemple de commande awk
Pingback: La commande ps dans la pratique - HAMIDA.info
Pingback: GREP – Globally search for Regular Expression and Print it - HAMIDA.info