Articles

scripting awk expliqué avec des exemples pratiques

Posted on

La commande / l’outil Awk est utilisé pour manipuler les lignes et les colonnes de texte dans un fichier. Awk a intégré des fonctions de chaîne et des tableaux associatifs. Awk supporte la plupart des opérateurs, des blocs conditionnels et disponibles en langage C. awk scripting

awk scripting

Une des bonnes choses est que nous pouvons utiliser la commande awk avec d’autres commandes pour obtenir la sortie requise. Nous pouvons également convertir un script awk en perl.

Système de base de l’awk : ‘BEGIN {start_action} {action} END {stop_action}’ nom_fichier

Voici les actions

  • Begin block est effectué avant le fichier
  • End block est effectué après le traitement du fichier
  • Le reste des actions est effectué pendant le traitement du fichier

Exemples : Créer un fichier avec le nom test ci-dessous les données dans celui-ci

# cat test

D’après les données ci-dessus, vous pouvez observer que le fichier a des lignes et des colonnes séparées par un espace et les lignes sont de nouvelles lignes. Pour expliquer cet article, nous allons utiliser le fichier test pour quelques exemples.

Syntaxe de la commande : awk ‘{print $3}’ test

Ici $3 a une signification imprimer les 3èmes colonnes parmi toutes les colonnes du fichier test. Dans la manière de vous voudriez imprimer plusieurs colonnes mentionner les noms de colonnes séparés par une virgule $1,$2,$3….. ci-dessous est la sortie qui comme 3ème colonne dans toutes les lignes

# awk '{ print $3 }' testroot# awk '{ print $1,$3,$6 }' test-rw-r--r--. root Apr

Pour imprimer les 4ème et 6ème colonnes dans un fichier utiliser awk ‘{print $4,$6}’ test

Ici les blocs begin et end ne sont pas utilisés dans awk. Ainsi, la commande print sera exécutée pour chaque ligne qu’elle lit dans le fichier. Dans l’exemple suivant, nous verrons comment utiliser les blocs begin et end.

Imprimer la somme de la valeur de la colonne

Syntaxe de la commande : awk ‘BEGIN {sum=0} {sum=sum+$7} END {print sum}’ test

L’exemple ci-dessus va imprimer la somme de la valeur de la 7e colonne. Dans le bloc de départ, la variable sum est assignée avec la valeur 0. Dans le bloc suivant, la valeur de la 7e colonne est ajoutée à la variable sum. Cet ajout de la 7ème colonne à la variable sum est répété pour chaque ligne traitée. Lorsque toutes les lignes sont traitées, la variable sum contient la somme des valeurs de la 7ème colonne. Cette valeur est imprimée dans le bloc End comme indiqué ci-dessous:

# awk 'BEGIN {sum=0} {sum=sum+$7} END {print sum}' test300

Somme de la valeur de la colonne en utilisant le script awk

Dans le 2ème exemple, nous avons vu que comment faire la SOMME de la valeur de la 7ème colonne, de la même manière au lieu d’écrire dans une déclaration d’une ligne, nous écrivons comme un script. Créez un fichier sumofcolumn et collez le script ci-dessous dans ce fichier

#!/usr/bin/awk -fBEGIN {sum=0} {sum=sum+$7} END {print sum}

Maintenant exécutez le script en utilisant la commande awk comme indiqué ci-dessous

# awk -f sumofcolumn test300

Ceci va exécuter le script dans le fichier sumofcolumn et affiche la somme de la 7e colonne dans le test.

Recherche d’une chaîne de caractères et impression de la ligne correspondante

Syntaxe de la commande : awk ‘{if($9 == « arkit ») print $0;}’ test

L’exemple ci-dessus vérifiera la présence de la chaîne de caractères « arkit » dans la 3e colonne et s’il trouve une correspondance alors il imprimera la ligne entière. La sortie de cette commande awk est ci-dessous

# awk '{ if($3 == "arkit") print $0;}' test

Boucle for avec multiplication de la valeur mentionnée incrémentée de +1

Syntaxe de la commande : awk ‘BEGIN { for(i=1;i<=10;i++) print « Valeur multipliée de », i, « est »,i*i ; }’

La commande ci-dessus imprimera la multiplication des premiers nombres de 1 à 10. i++ va ajouter +1 au nombre pour qu’il continue à augmenter jusqu’à 10. La sortie de la commande est ci-dessous

# awk 'BEGIN { for(i=1;i<=10;i++) print "Multiplied value of", i, "is",i*i; }'Multiplied value of 1 is 1

6. Séparateur de champ d’entrée

Vous avez déjà vu $0,$1,$2… qui imprime la ligne entière, la première colonne, la deuxième colonne… respectivement. Maintenant, nous allons voir d’autres variables intégrées avec des exemples.

Selon notre exemple de fichier test, nous avons des colonnes qui sont séparées par par espace, mais au lieu de l’espace si vous avez un autre symbole comme .c’est-à-dire : , – nous pouvons en faire usage pour séparer et imprimer.

Exemple si vous avez : (deux points) comme séparateur alors utilisez ci-dessous

awk ‘BEGIN {FS= » : »} {print $2}’ test

OU

awk -F : ‘{print $2}’ test

ceci imprimera la sortie comme ci-dessous

# awk -F: '{print $2}' test41 file12

OFS – Variable de séparateur de champ de sortie

Par défaut, chaque fois que nous avons imprimé les champs en utilisant l’instruction print, les champs sont affichés avec le caractère espace comme délimiteur. Par exemple

Syntaxe de la commande : awk ‘{print $4,$5}’ test

# awk '{print $4,$5}' testroot 0

Nous pouvons modifier ce comportement par défaut en utilisant la variable OFS comme

Syntaxe de la commande : awk ‘BEGIN {OFS= » : »} {print $4,$5}’ test

# awk 'BEGIN {OFS=":"} {print $4,$5}' testroot:0

Note : print $4,$5 et print $4$5 ne fonctionneront pas de la même manière. La première affiche la sortie avec l’espace comme délimiteur. La seconde affiche la sortie sans aucun délimiteur.

NF – Number of fields count

NF peut être utilisé pour connaître le nombre de champs dans chaque ligne ci-dessous est l’exemple de commande

# awk '{print NF}' test9

NR – nombre d’enregistrements compte

NR peut être utilisé pour connaître le numéro de ligne ou le nombre de lignes dans un fichier

# awk '{print NR}' test12345678910

L’exemple ci-dessus imprimera le numéro de ligne, dans le fichier de test, nous avons dix lignes.

Imprimer le nombre d’enregistrements dans un fichier particulier

Si vous voyez l’exemple ci-dessus de la 9e section est imprimé tous les numéros de ligne, mais la condition est que je voudrais voir seulement le nombre d’enregistrements.

# awk 'END {print NR}' test10

Cela affichera le nombre total de lignes dans le fichier de test.

Fonctions de chaîne de caractères dans Awk:

Certaines des fonctions de chaîne de caractères dans awk sont :

  • index(string,search)
  • length(string)
  • split(string,array,separator)
  • substr(string,position)
  • substr(string,position,max)
  • tolower(string)
  • toupper(string)

Exemples avancés :

Filtrer les lignes à l’aide de la fonction Awk split

La fonction awk split divise une chaîne de caractères en un tableau en utilisant le délimiteur.

La syntaxe de la fonction split est
split(string, array, delimiter)

Nous allons maintenant voir comment filtrer les lignes en utilisant la fonction split avec un exemple.

L’entrée « advanced.txt » contient les données au format suivant

# cat advanced.txt1 U,N,ARKIT,0002 A,B,TEST,1113 I,M,ARKIT,2224 C,D,TECH,3335 T,I,RAVI,444

Sortie requise : Nous devons maintenant imprimer uniquement les lignes dans lesquelles ces 2e champ ont la chaîne « ARKIT » comme 3e champ.

The output is:1 U,N,ARKIT,0003 I,M,ARKIT,222

La commande awk pour obtenir la sortie est mentionnée ci-dessous

Command: awk '{ split($2,arr,","); if(arr == "0") print $0 } ' advanced.txt
# awk '{ split($2,arr,","); if(arr == "ARKIT") print $0} ' advanced.txt1 U,N,ARKIT,0003 I,M,ARKIT,222

Deux exemples de commandes / outils awk que nous verrons dans le prochain post Restez à l’écoute.

Mots clés : awk scripting in linux,comment exécuter un script awk sous linux,comment écrire un script awk sous linux,awk in linux bash,awk in linux command,awk script examples linux,awk in linux example,awk in linux means,awk in linux pdf,awk in linux programming,awk in linux ppt,awk in linux shell script,commande awk in linux shell scripting,awk in linux tutorial,awk in linux terminal,awk in linux with examples, awk scripting, awk scripting, awk scripting, awk scripting, awk scripting

Merci pour cette lecture.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *