Bonjour,

Je poste ici après qques heures de galère avec sed, awk, cut, grep... les scripts bash c'est décidément pas mon fort (mais ça a l'air biiiiien)

Le problème: j'ai un fichier, $samplefile dans l'exemple, d'adresse mac de la forme:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
40:1:d7:ec:96:83
40:1:d7:ec:96:84
Avec une centaine d'entrées.

J'ai besoin de changer le dernier octet de l'adresse
Avec une chaîne ou un entier, pas de soucis, ça passe avec une ligne du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
cat $samplefile | awk -F ":" '{gsub($6, "toto");print $1":"$2":"$3":"$4":"$5":"$6}'
Ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part
cat $samplefile | awk -F ":" '{gsub($6, 45);print $1":"$2":"$3":"$4":"$5":"$6}'
Par contre quand j’essaie de placer une variable à la place de toto ou 45, j'ai un résultat pas terrible, seulement la partie 'chiffre' du dernier octet s'affiche. Voici le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
#Décimal initial
first=131
#Pour chaque ligne
for line in $(cat $samplefile);do
        #Je coverti mon décimal en hexa
        valhex=$(echo "obase=16; $first"|bc)
        #Je substitue mon dernier élément
        echo $line | awk -F ":" '{gsub($6, '$valhex');print $1":"$2":"$3":"$4":"$5":"$6}'
        #j'incrémente mon décimal
        ((first++))
done
Ma variable $valhex est bien incrémentée, de 83 à 8C pour les dix premières valeurs mais le résultat de la substiution est foireux:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
40:1:d7:ec:96:83
40:1:d7:ec:96:84
40:1:d7:ec:96:85
40:1:d7:ec:96:86
40:1:d7:ec:96:87
40:1:d7:ec:96:88
40:1:d7:ec:96:89
40:1:d7:ec:96:8
40:1:d7:ec:96:8
40:1:d7:ec:96:8
Pour le dernier octet des adresses j'ai un 8 au lieu de 8A, 8B, 8C...

En espérant avoir été clair, si quelqu'un a une idée, une astuce et/ou explication, je suis preneur...

Merci!