Aide script AWK pour convertir rang IP

Aide script AWK pour convertir rang IP - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 08-12-2012 à 17:09:41    

Salut !
 
Alors voilà mon soucie je dispose de fichier txt contenant des rang d'ip de ce style "128.127.128-143.0-255" et j'aimerais les avoir de la forme suivante "128.127.128.0 - 128.127.143.255"
Il y'en n'a tellement à convertir comme ça que a la main sa prendrais vraiment trop de temps. Ne connaissant pas énormément en script unix j'ai cherché un peu et j'ai trouvé des infos sur la commande awk qui a priori devrait pouvoir faire ce que je demande mais voilà même après avoir lu plusieurs fois la doc je ne vois vraiment pas avec quel argument l'utilisé.
Donc ma question serait est-il vraiment possible de faire ce que je veux avec awk ou a-t-il une autre manière plus simple ou ce n'est juste pas possible ?


Message édité par dudzz le 08-12-2012 à 21:49:45
Reply

Marsh Posté le 08-12-2012 à 17:09:41   

Reply

Marsh Posté le 08-12-2012 à 20:37:35    

Oui, ça doit être faisable :)  
Un truc de ce genre :

awk -F'.' '
NF==4 {
  n=split($1, tmp, "-" );
  if (n==1) { ip1_1=$1; ip2_1=$1; } else { ip1_1=tmp[1]; ip2_1=tmp[2]; }
  n=split($2, tmp, "-" );
  if (n==1) { ip1_2=$2; ip2_2=$2; } else { ip1_2=tmp[1]; ip2_2=tmp[2]; }
  n=split($3, tmp, "-" );
  if (n==1) { ip1_3=$3; ip2_3=$3; } else { ip1_3=tmp[1]; ip2_3=tmp[2]; }
  n=split($4, tmp, "-" );
  if (n==1) { ip1_4=$4; ip2_4=$4; } else { ip1_4=tmp[1]; ip2_4=tmp[2]; }
  printf("%s.%s.%s.%s - %s.%s.%s.%s\n", ip1_1, ip1_2, ip1_3, ip1_4, ip2_1, ip2_2, ip2_3, ip2_4);
}
' le_fichier_a_traiter


Message édité par mrbebert le 08-12-2012 à 22:46:47

---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 08-12-2012 à 22:27:18    

Salut mrbebert !
J'ai testé le script c'est du quasi parfait ! Sauf que certaine IP il ne l'es réécris pas correctement par exemple pour :


5.100.144-151.0-255
5.10.128-135.0-255
5.102.72-79.0-255
5.104.192-199.0-255
5.104.96-103.0-255
5.134.96-103.0-255
5.135.0-255.0-255
5.144.136-143.0-255
5.149.176-191.0-255
5.158.200-207.0-255
5.158.240-255.0-255
5.172.176-183.0-255
5.179.120-127.0-255
5.179.192-199.0-255
5.187.96-127.0-255


Il donne après passage du script :


5.100.144.0 - 5.5.151.255
5.10.128.0 - 5.5.135.255
5.102.72.0 - 5.5.79.255
5.104.192.0 - 5.5.199.255
5.104.96.0 - 5.5.103.255
5.134.96.0 - 5.5.103.255
5.135.0.0 - 5.5.255.255
5.144.136.0 - 5.5.143.255
5.149.176.0 - 5.5.191.255
5.158.200.0 - 5.5.207.255
5.158.240.0 - 5.5.255.255
5.172.176.0 - 5.5.183.255
5.179.120.0 - 5.5.127.255
5.179.192.0 - 5.5.199.255
5.187.96.0 - 5.5.127.255


Mais en tous cas un grand merci tu m'avance beaucoup avec ce script ! Je vais m'y pencher de plus près voir si j'arrive a corriger le problème de moi-même.


Message édité par dudzz le 08-12-2012 à 22:27:54
Reply

Marsh Posté le 08-12-2012 à 22:46:28    

Oui, j'ai oublié de remplacer des $1 par du $2, $3, $4 :pt1cable:
J'ai corrigé.

Message cité 1 fois
Message édité par mrbebert le 08-12-2012 à 22:47:18

---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 09-12-2012 à 18:22:10    

mrbebert a écrit :

Oui, j'ai oublié de remplacer des $1 par du $2, $3, $4 :pt1cable:
J'ai corrigé.


 
Ah oui exact ! Le script marche parfaitement ! Je te remerci ca va bien m'aider.

Reply

Marsh Posté le 10-12-2012 à 09:10:19    

salut,
 

Code :
  1. awk -F'.' '{
  2.    for(i=1;i<=NF;i++){
  3.       if($i~"-" ){
  4.          split($i,a,"-" )
  5.          s=s?s"."a[1]:a[1]
  6.          e=e?e"."a[2]:a[2]
  7.       }else{
  8.          s=s?s"."$i:$i
  9.          e=e?e"."$i:$i
  10.       }
  11.    } print s"-"e; s=e=""
  12. }' le_fichier_a_traiter
Code :
  1. 5.100.144.0-5.100.151.255
  2. 5.10.128.0-5.10.135.255
  3. 5.102.72.0-5.102.79.255
  4. 5.104.192.0-5.104.199.255
  5. 5.104.96.0-5.104.103.255
  6. 5.134.96.0-5.134.103.255
  7. 5.135.0.0-5.135.255.255
  8. 5.144.136.0-5.144.143.255
  9. 5.149.176.0-5.149.191.255
  10. 5.158.200.0-5.158.207.255
  11. 5.158.240.0-5.158.255.255
  12. 5.172.176.0-5.172.183.255
  13. 5.179.120.0-5.179.127.255
  14. 5.179.192.0-5.179.199.255
  15. 5.187.96.0-5.187.127.255

Reply

Marsh Posté le 10-12-2012 à 09:55:21    

Ah ben voilà : je n'avais jamais réussi à paramétrer l'accès à l'un des champs (le $i) :jap:  
Ca va bien simplifier les choses [:bien] :)


---------------
Doucement le matin, pas trop vite le soir.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed