awk Quelques exemples d'utilisation de cette commande. Voir : http://www.gecif.
awk Quelques exemples d'utilisation de cette commande. Voir : http://www.gecif.net/articles/linux/shell.html ou http://lea-linux.org/documentations/Dev-awk Fonctions awk : http://www.shellunix.com/awk.html#char 1 Dans notre exemple, chaque champ est séparé par un ou plusieurs blancs. Le séparateur peut être modifie comme on le veut par la variable globale FS. Pour l'instant, FS = " " . 2 AWK compte le nombre de champs d'une ligne courante; ce nombre est placé dans la variable globale NF (dans l'exemple, NF est variable). 3 AWK compte le nombre de lignes du fichier d'entrée; ce nombre est placé dans la variable globale NR (dans l'exemple, NR = 9). 4 Les champs sont désignés par $1, $2, etc. $0 représente toute la ligne. Les exercices sont effectués sur le fichier suivant : $ cat essai Bonjour, Ceci est un fichier de test. Ceci la ligne numéro 4. # ceci est un commentaire Ceci est la ligne numéro 7. Au revoir Manipulations sur les champs : pour chaque ligne du fichier essai, on veut afficher la ligne avec le champs 2 égal à "" (vide). Le séparateur est le caractère espace. $ awk -F" " '{$2=""; print $0}' essai Bonjour, Ceci un fichier de test. Ceci ligne numéro 4. # est un commentaire Ceci la ligne numéro 7. Au Blocs BEGIN et END : On veut compter le nombre de lignes du fichier essai : $ awk 'END {print NR}' essai 9 On note que l'on n'exécute que le bloc END de awk. Ce bloc ne s'exécute qu'une fois, après la fin du traitement des lignes (tout comme le bloc BEGIN ne s'exécute qu'une fois avant le parcours du fichier). Même exercice avec exécution du bloc central de awk : ce bloc s'exécute pour chaque ligne du fichier $ awk '{print NR}' essai 1 2 3 4 5 6 7 8 9 Transformations et utilisation des formats et de printf On peut utiliser la commande printf pour définir des formats d'affichage particuliers. La forme de cette commande est similaire à celle du langage C : awk -F" " '{printf ("formats",data1, data2, ...) fichier_entree Soit un fichier nommé awk_entree : $ cat awk_entree alexandre moniteur 65 63 74 kernighan programmeur 25 8 41 mofiset sources 54 69 32 charles-andre restauration 62 2 37 On souhaite appliquer à ce fichier les transformations et traitement suivant : - réorganiser l'ordre des colonnes pour obtenir dans l'ordre : col 2, col4, 3 premiers caractères de la colonne 1, col 3, col 5 - le format de la colonne 4 sera toujours sur 2 chiffres (02 p.ex) - le fichier d'entrée utilise la tabulation comme séparateur qu'on on veut remplacer par ";" en sortie. Le résultat attendu est : $ cat awk_sortie moniteur;63;ale;65;74 programmeur;08;ker;25;41 sources;69;mof;54;32 restauration;02;cha;62;37 La commande à utiliser : $ awk -F'\t' '{printf("%s;%02d;%s;%d;%d\n",$2,$4,substr($1,1,3),$3,$5)}' awk_entree >awk_sortie On constate que par ce moyen, on peut réaliser des transformations très intéressantes sur les fichiers de texte. Très utile dans les échanges inter-bases de données. Autre exemple dans le même domaine : on dispose d'un gros fichier dont on connais la structure de façon incomplète. On veut l'importer dans une base de données. Avant de créer la table d'accueil, on a besoin de connaitre la taille maximale de chaque colonne. À noter que sur un fichier de deux millions de lignes le traitement se fait en 1 ou 2 secondes. Sur le même fichier. On veut connaitre la longueur maximale d'une colonne. $ awk -F'\t' '{len=length($1);if (max<len){max=len}}END{print "longueur max : ",max}' awk_entree Même traitement en utilisant un programme avec awk : Le programme prog_awk : { len=length($1); if (max<len){ max=len; } } END { print "longueur max : ",max; } L'exécution : $ awk -F'\t' -f prog_awk awk_entree uploads/Sante/ awk-digest.pdf
Documents similaires
-
28
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Mai 04, 2022
- Catégorie Health / Santé
- Langue French
- Taille du fichier 0.0630MB