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