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:
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:
cat $samplefile | awk -F ":" '{gsub($6, "toto");print $1":"$2":"$3":"$4":"$5":"$6}'
Ou
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:
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:
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!
Partager