AWK - Fonctions diverses

AWK a les fonctions diverses suivantes -

fermer (expr)

Cette fonction ferme le fichier de pipe.

Exemple

[jerry]$ awk 'BEGIN {
   cmd = "tr [a-z] [A-Z]"
   print "hello, world !!!" |& cmd
   
   close(cmd, "to")
   cmd |& getline out
   print out;
   
   close(cmd);
}'

En exécutant ce code, vous obtenez le résultat suivant -

Production

HELLO, WORLD !!!

Le script a-t-il l'air cryptique? Démystifions-le.

  • La première déclaration, cmd = "tr [a-z] [A-Z]" - est la commande à laquelle nous établissons la communication bidirectionnelle depuis AWK.

  • La déclaration suivante, à savoir, le printcommande, fournit une entrée à la commande tr. Ici&| indique une communication bidirectionnelle.

  • La troisième déclaration, à savoir, close(cmd, "to"), ferme le to processus après avoir concurrencé son exécution.

  • La prochaine déclaration cmd |& getline out stocke la sortie dans out variable à l'aide de la fonction getline.

  • L'instruction d'impression suivante imprime la sortie et finalement la fonction close ferme la commande.

supprimer

Cette fonction supprime un élément d'un tableau. L'exemple suivant montre l'utilisation dudelete fonction -

Exemple

[jerry]$ awk 'BEGIN {
   arr[0] = "One"
   arr[1] = "Two"
   arr[2] = "Three"
   arr[3] = "Four"
   print "Array elements before delete operation:"
   
   for (i in arr) {
      print arr[i]
   }
   delete arr[0]
   delete arr[1]
   print "Array elements after delete operation:"
   
   for (i in arr) {
      print arr[i]
   }
}'

En exécutant ce code, vous obtenez le résultat suivant -

Production

Array elements before delete operation:
One
Two
Three
Four

Array elements after delete operation:
Three
Four

sortie

Cette fonction arrête l'exécution d'un script. Il accepte également une optionexprqui devient la valeur de retour d'AWK. L'exemple suivant décrit l'utilisation de la fonction exit.

Exemple

[jerry]$ awk 'BEGIN {
   print "Hello, World !!!"
   exit 10
   print "AWK never executes this statement."
}'

En exécutant ce code, vous obtenez le résultat suivant -

Production

Hello, World !!!

fflush

Cette fonction vide tous les tampons associés au fichier ou au tube de sortie ouvert. La syntaxe suivante illustre la fonction.

Syntaxe

fflush([output-expr])

Si aucune sortie-expr n'est fournie, elle vide la sortie standard. Si output-expr est la chaîne nulle (""), alors il vide tous les fichiers et tubes ouverts.

getline

Cette fonction demande à AWK de lire la ligne suivante. L'exemple suivant lit et affiche lemarks.txt fichier en utilisant la fonction getline.

Exemple

[jerry]$ awk '{getline; print $0}' marks.txt

En exécutant ce code, vous obtenez le résultat suivant -

Production

2) Rahul   Maths     90
4) Kedar   English   85
5) Hari    History   89

Le script fonctionne très bien. Mais où est la première ligne? Laissez-nous découvrir.

Au début, AWK lit la première ligne du fichier marks.txt et le stocke dans $0 variable.

Et enfin, AWK printinstruction imprime la deuxième ligne. Ce processus se poursuit jusqu'à la fin du fichier.

prochain

le nextfonction modifie le déroulement du programme. Cela provoque l'arrêt du traitement en cours de l'espace de motif. Le programme lit la ligne suivante et recommence à exécuter les commandes avec la nouvelle ligne. Par exemple, le programme suivant n'effectue aucun traitement lorsqu'une correspondance de modèle réussit.

Exemple

[jerry]$ awk '{if ($0 ~/Shyam/) next; print $0}' marks.txt

En exécutant ce code, vous obtenez le résultat suivant -

Production

1) Amit    Physics   80
2) Rahul   Maths     90
4) Kedar   English   85
5) Hari    History   89

fichier suivant

le nextfilefonction modifie le déroulement du programme. Il arrête de traiter le fichier d'entrée actuel et commence un nouveau cycle à travers les instructions de modèle / procédures, en commençant par le premier enregistrement du fichier suivant. Par exemple, l'exemple suivant arrête le traitement du premier fichier lorsqu'une correspondance de modèle réussit.

Créez d'abord deux fichiers. Laisse nous direfile1.txt contient -

file1:str1
file1:str2
file1:str3
file1:str4

Et file2.txt contient -

file2:str1
file2:str2
file2:str3
file2:str4

Utilisons maintenant la fonction nextfile.

Exemple

[jerry]$ awk '{ if ($0 ~ /file1:str2/) nextfile; print $0 }' file1.txt file2.txt

Production

En exécutant ce code, vous obtenez le résultat suivant -

file1:str1
file2:str1
file2:str2
file2:str3
file2:str4

revenir

Cette fonction peut être utilisée dans une fonction définie par l'utilisateur pour renvoyer la valeur. Veuillez noter que la valeur de retour d'une fonction n'est pas définie si expr n'est pas fourni. L'exemple suivant décrit l'utilisation de la fonction de retour.

Commencez par créer un functions.awk fichier contenant la commande AWK comme indiqué ci-dessous -

Exemple

function addition(num1, num2) {
   result = num1 + num2
   return result
}
BEGIN {
   res = addition(10, 20)
   print "10 + 20 = " res
}

En exécutant ce code, vous obtenez le résultat suivant -

Production

10 + 20 = 30

système

Cette fonction exécute la commande spécifiée et renvoie son état de sortie. Un état de retour 0 indique qu'une exécution de commande a réussi. Une valeur différente de zéro indique un échec de l'exécution de la commande. Par exemple, l'exemple suivant affiche la date actuelle et montre également l'état de retour de la commande.

Exemple

[jerry]$ awk 'BEGIN { ret = system("date"); print "Return value = " ret }'

En exécutant ce code, vous obtenez le résultat suivant -

Production

Sun Dec 21 23:16:07 IST 2014
Return value = 0