Recherche de site Web

Comment appeler un programme externe à l'aide de awk


Introduction

Awk est un puissant outil de traitement de texte qui peut être utilisé pour automatiser diverses tâches telles que la manipulation, le filtrage et la création de rapports de données. L'une des fonctionnalités intéressantes d'awk est sa capacité à appeler des programmes externes depuis le script. Dans cet article, nous explorerons comment appeler un programme externe à l'aide de awk.

Comprendre la fonction System()

La fonction system() est utilisée pour exécuter des commandes externes depuis awk. la syntaxe de la fonction system() est la suivante -

system(command)

L'argument command est une commande externe que nous souhaitons exécuter. Lorsque la fonction system() est exécutée, awk transmet l'argument de commande au shell pour exécution. shell exécute ensuite la commande et renvoie l'état de sortie à awk.

Appel d'un programme externe

Pour appeler un programme externe à l'aide de awk, nous devons spécifier la commande que nous voulons exécuter comme argument de la fonction system(). Par exemple, disons que nous voulons exécuter la commande date à partir d'un script awk. Nous pouvons le faire comme suit -

{ 
   system("date") 
}

Dans cet exemple, nous appelons la commande date à l’aide de la fonction system(). Lorsque le script est exécuté, la commande de date est exécutée et la date et l'heure actuelles sont affichées à l'écran.

Passer une entrée à un programme externe

Nous pouvons transmettre une entrée à un programme externe en utilisant la fonction system(). Par exemple, disons que nous voulons trier une liste de nombres à l’aide de la commande sort. Nous pouvons le faire comme suit -

{ 
   print "3
1
2" | "sort" 
}

Dans cet exemple, nous utilisons l'instruction print pour générer une liste de nombres (3, 1, 2). Nous utilisons ensuite le symbole pipe (|) pour transmettre cette liste de nombres en entrée de la commande de tri. La commande sort trie ensuite les nombres et renvoie le résultat à awk.

Stockage de la sortie d'un programme externe

Nous pouvons stocker la sortie d'un programme externe dans une variable en utilisant la fonction getline(). La fonction getline() est utilisée pour lire une ligne d’entrée à partir d’un fichier ou d’une commande. Nous pouvons utiliser la fonction getline() pour capturer la sortie d’un programme externe. Par exemple, disons que nous voulons capturer la sortie de la commande ls dans une variable. Nous pouvons le faire comme suit -

{ 
   "ls" | getline output 
   print output 
}

Dans cet exemple, nous utilisons la fonction system() pour exécuter la commande ls. Nous utilisons ensuite la fonction getline() pour capturer la sortie de la commande ls dans la variable de sortie. Enfin, nous utilisons l'instruction print pour afficher la sortie de la commande ls.

Passer des arguments à un programme externe

Nous pouvons transmettre des arguments à un programme externe en utilisant la fonction system(). Par exemple, disons que nous voulons convertir une chaîne en majuscule à l’aide de la commande tr. Nous pouvons le faire comme suit -

{ 
   str = "hello world" 
   cmd = "echo " str " | tr '[:lower:]' '[:upper:]'" 
   cmd | getline output 
   print output 
}

Dans cet exemple, nous utilisons la commande echo pour transmettre la chaîne « hello world » en entrée de la commande tr. Nous utilisons ensuite la commande tr pour convertir la chaîne en majuscules. Enfin, nous utilisons la fonction getline() pour capturer la sortie de la commande tr dans la variable de sortie.

Gestion des erreurs

Lorsque vous appelez un programme externe à l'aide de awk, il est important de gérer les erreurs pouvant survenir lors de l'exécution. Nous pouvons vérifier l’état de sortie d’un programme externe à l’aide de la fonction system(). L'état de sortie est un nombre qui indique le succès ou l'échec de la commande. Une valeur de zéro indique un succès, tandis qu'une valeur non nulle indique un échec.

Par exemple, disons que nous voulons vérifier si un fichier existe à l'aide de la commande test. Nous pouvons le faire comme suit -

{ 
   file = "myfile.txt" 
   cmd = "test -e " file 
   if (system(cmd) != 0) { 
      print "File does not exist" 
   } else { 
      print "File exists" 
   } 
}

Dans cet exemple, nous utilisons la commande test pour vérifier si le fichier "myfile.txt" existe. Nous utilisons ensuite la fonction system() pour exécuter la commande de test. Si l'état de sortie de la commande de test est différent de zéro, nous imprimons "Le fichier n'existe pas". Sinon, nous imprimons "Le fichier existe".

Exemples avancés

  • Filtrage de la sortie d'un programme externe Nous pouvons filtrer la sortie d'un programme externe en utilisant awk. Par exemple, disons que nous souhaitons afficher uniquement la première ligne de sortie de la commande ps. Nous pouvons le faire comme suit -

{ 
   cmd = "ps" 
   cmd | getline output 
   close(cmd) 
   split(output, lines, "
") 
   print lines[1] 
}

Dans cet exemple, nous utilisons la fonction getline() pour capturer la sortie de la commande ps dans la variable de sortie. Nous utilisons ensuite la fonction split() pour diviser la sortie en un tableau de lignes. Enfin, nous utilisons l'instruction print pour afficher la première ligne de sortie.

  • Utilisation des variables awk dans les commandes externes Nous pouvons utiliser des variables awk dans les commandes externes. Par exemple, disons que nous voulons créer un fichier avec un nom basé sur une variable à l'aide de la commande tactile. Nous pouvons le faire comme suit -

{ 
   filename = "myfile.txt" 
   cmd = "touch " filename 
   system(cmd) 
}

Dans cet exemple, nous utilisons la variable filename dans la commande touch pour créer un fichier portant le nom « myfile.txt ».

  • Utiliser awk pour formater la sortie d'un programme externe Nous pouvons utiliser awk pour formater la sortie d'un programme externe. Par exemple, disons que nous souhaitons afficher la sortie de la commande df dans un format plus lisible. Nous pouvons le faire comme suit -

{ 
   cmd = "df -h" 
   cmd | getline output 
   close(cmd) 
   printf "%-20s%-10s%-10s%-10s%-10s%s
", "Filesystem", "Size", "Used", "Avail", "Use%", 
   "Mounted on" 
   split(output, lines, "
") 
   for (i=2; i<=length(lines); i++) { 
      printf "%-20s%-10s%-10s%-10s%-10s%s
", $1, $2, $3, $4, $5, $6 
   } 
}

Dans cet exemple, nous utilisons l'instruction printf pour formater la sortie de la commande df. Nous imprimons une ligne d'en-tête avec des en-têtes de colonnes, suivie de la sortie de la commande df avec chaque colonne alignée sur une largeur fixe.

Conclusion

Dans cet article, nous avons exploré comment appeler un programme externe à l'aide de awk. Nous avons vu comment transmettre des entrées à un programme externe, capturer la sortie d'un programme externe et gérer les erreurs pouvant survenir lors de l'exécution. En utilisant la capacité d'awk à appeler des programmes externes, nous pouvons automatiser diverses tâches et rendre nos scripts plus puissants et plus flexibles.

Articles connexes: