Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1804 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Aide script AWK pour convertir rang IP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide script AWK pour convertir rang IP

n°1326079
dudzz
Le lait, après les céréales
Posté le 08-12-2012 à 17:09:41  profilanswer
 

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
mood
Publicité
Posté le 08-12-2012 à 17:09:41  profilanswer
 

n°1326080
mrbebert
Posté le 08-12-2012 à 20:37:35  profilanswer
 

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.
n°1326085
dudzz
Le lait, après les céréales
Posté le 08-12-2012 à 22:27:18  profilanswer
 

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
n°1326086
mrbebert
Posté le 08-12-2012 à 22:46:28  profilanswer
 

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.
n°1326101
dudzz
Le lait, après les céréales
Posté le 09-12-2012 à 18:22:10  profilanswer
 

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.

n°1326128
Profil sup​primé
Posté le 10-12-2012 à 09:10:19  answer
 

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

n°1326129
mrbebert
Posté le 10-12-2012 à 09:55:21  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Aide script AWK pour convertir rang IP

 

Sujets relatifs
Aide pour traduction Linux Deepin[Install Party] IP de Linux-Nantes le 24 novembre 2012
Script pour obtenir le nom, l'IP et la MAc des PC du réseauCaméra IP avec enregistrement pour chez soi
Aide pour installer un logiciel sous LubuntuAide sur script bash
Aide pour script curlAide d'un choix d'une solution de virtualisation
Script Bash pour récuperer seulement l'adresse IPPlus de réseau VMware quand je met une IP fixe, merci pour votre aide.
Plus de sujets relatifs à : Aide script AWK pour convertir rang IP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR