logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 07-03-2020 17:27:41

galactic
Membre
Inscription : 16-01-2017

[Résolu] Commande système dans un script AWK

Bonjour,
J'ai une commande d'envoi de mail avec mutt:

mutt -s "changement IP" ***********@wanadoo.fr < ipadresse



Grace à un script qui s'éxécute toute les heures, je récupère un fichier ou j'ai 2 adresses IP, l'ancienne et la nouvelle, fichier de la forme :

adresses

162.54.156.12:154.210.72.89



Dans une commande awk je regarde ces 2 adresses, si différentes je dois envoyer un mail, et dans tous les cas je supprime la première adresse :

awk -F":" '{if($1!=$2) {"Envoi de mai"}{print $2":"}}' adresses > ipadresse



Mon problème est de savoir comment procéder : pas de possibilité de commande system et pas de variable de retour avec awk.

Dernière modification par galactic (29-03-2020 14:46:25)

Hors ligne

#2 29-03-2020 14:45:05

galactic
Membre
Inscription : 16-01-2017

Re : [Résolu] Commande système dans un script AWK

Bjr,
N'ayant pas trouvé de solution pour une commande système à l'intérieur d'un script awk, j'ai déporté la commande à l'extérieur, Celà donne un script shell avec 3 lignes de plus, mais ce n'est pas grave.
D'abord, j'ai un fichier status qui contient :

1 noip2 process active.

Process 784, started as noip2, (version 2.1.9)
Using configuration from /usr/local/etc/no-ip2.conf
Last IP Address set 176.124.126.89
Account f********@*******.fr
configured for:
  host  *****.*****.org
Updating every 30 minutes via /dev/eth0 with NAT enabled.
 


Et un fichier ipaddress qui contient la dernière adresse IP valide :

cat ipaddress
176.124.146.62:


Et le script d'envoi de mail si l'adresse IP courante est différente de la précédente :


sed -n '5p' status > ftemp
sed -i 's/Last IP Address set //g' ftemp
cat ftemp >> ipaddress
tr -d '\n' < ipaddress > ftemp
IFS=\: read ip1 ip2 < ftemp

if [ $ip1 != $ip2 ]; then
  echo $ip2 | mutt -s "Changement IP" **********@free.fr;
fi
awk -F":" '{{print $2":"}}' ftemp > ipaddress
 

Hors ligne

#3 29-03-2020 18:29:46

valdé
Administrateur
Lieu : Paris
Distrib. : Debian GNU/Linux trixie/sid x86_64
Noyau : 6.6.13-amd64
(G)UI : MATE 1.26.1
Inscription : 04-10-2016

Re : [Résolu] Commande système dans un script AWK

Voici comment j'utilise un script à l'intérieur d'un awk :


    timeout 3s df --human-readable --output=source,fstype,used,size,pcent,target $@     \
    | tail -n +2                                                                        \
    | sort -r -n -k 5                                                                   \
    | awk -v rouge=$ROUGE -v jaune=$JAUNE -v vert=$VERT -v normal=$NORMAL -v gras=$GRAS \
    'BEGIN {printf "%s %s %s %s %s %s %s %s %s %s\n", "Sys. de fichiers", "Type", "Utilisé", "Taille", gras, "Uti%", gras, "Monté sur", "Mode", normal} {uti_percent=$5 ; sub("%","",$5) ; $5=$5+0 ; cmd="$HOME/.profile.d/scripts/rw_ro.sh $1" ; cmd | getline mode ; close(cmd) ; printf "%s %s %s %s %s %s %s %s %s\n", $1, $2, $3, $4, ($5>85)?rouge:($5>70?jaune:vert), uti_percent, normal, $6, mode}' \
    | column -t

 


~# Where there is a shell, there is a way.

Hors ligne

Pied de page des forums