Lire un fichier ligne par ligne et exécuter une commande en AWK

J’ai souvent besoin de pouvoir exécuter une commande pour chaque ligne d’un fichier.
Or j’utilise souvent AWK pour pouvoir générer le fichier sur lequel j’ai besoin d’exécuter les commandes et ensuite j’utilise basiquement une boucle « for » ou « while » pour exécuter mes commandes.

Il existe en fait une manière de tout faire en un beaucoup plus rapidement directement dans AWK.

Par exemple dans la list suivante j’ai une liste d’IP et de PORT et j’ai besoin de savoir les ip/ports qui sont up et ceux qui sont down:

crapules:~# head -n 5 /tmp/ipport_sort.txt 
192.168.19.33 9020
192.168.19.33 9021
192.168.19.33 9040
192.168.19.33 22
192.168.19.33 5666

Cela peut etre fait en une ligne (on utilise ici « nc » pour le faire) grâce à un | « /bin/sh » comme ceci

crapules:~# awk '{print "nc -n -v -z -w 5 " $1 " " $2 " ;" | "/bin/sh" }' /tmp/ipport_sort.txt 
(UNKNOWN) [192.168.19.33] 9020 (?) open
(UNKNOWN) [192.168.19.33] 9021 (?) open
(UNKNOWN) [192.168.19.33] 9040 (?) Connection timed out
(UNKNOWN) [192.168.19.33] 22 (ssh) open
(UNKNOWN) [192.168.19.33] 5666 (nrpe) open
(UNKNOWN) [192.168.19.33] 8020 (?) Connection timed out
(UNKNOWN) [192.168.19.33] 8021 (?) open
(UNKNOWN) [192.168.19.33] 6040 (?) open
(UNKNOWN) [192.168.19.34] 9020 (?) Connection timed out
(UNKNOWN) [192.168.19.34] 9021 (?) Connection timed out
(UNKNOWN) [192.168.19.34] 9040 (?) open
(UNKNOWN) [192.168.19.34] 9080 (?) open

A noter que j’utilise ici « nc -n » pour éviter d’avoir le reverse DNS avec NC.

Une variante consiste à utiliser un echo $? pour avoir juste le résultat de la commande (si par exemple la commande que l’on veut utiliser n’est pas verbeuse)

crapules:~# awk '{print "nc -n -z -w 5 " $1 " " $2 " ; echo $?" | "/bin/sh" }' /tmp/ipport_sort.txt 
0
0
1
1
1
0
1
0
0

											
Ce contenu a été publié dans Linux, sh, avec comme mot(s)-clé(s) , , , , , , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

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