2016-03-22 8 views
1

Ich habe IP-Datenbank (reif-APNIC) wie folgt aus:Wie kann ich IP-Datenbank analysieren und konvertieren?

inetnum:  218.75.100.64 - 218.75.100.67 
netname:  YONGKANG-SHIJI-NETBAR 
country:  CN 
descr:  Yongkang Shiji Internet Bar 
descr:  NULL 
admin-c:  XY203-AP 
tech-c:  CJ54-AP 
status:  ASSIGNED NON-PORTABLE 
changed:  [email protected] 20040610 
mnt-by:  MAINT-CN-CHINANET-ZJ-JH 
source:  APNIC 

inetnum:  218.75.99.0 - 218.75.99.3 
netname:  WEISHENG-COLTD 
country:  CN 
descr:   Donggan Hospital 
descr: 
admin-c:  DS1202-AP 
tech-c:   CJ54-AP 
mnt-irt:  IRT-CHINANET-ZJ 
status:   ASSIGNED NON-PORTABLE 
changed:  [email protected] 20150510 
mnt-by:   MAINT-CN-CHINANET-ZJ-JH 
source:   APNIC 
... 

ich CSV-Datei zu konvertieren (nur ipstart-ipend-netname-Land-descr1-Quelle) wie folgt aus:

218.75.100.64;218.75.100.67;YONGKANG-SHIJI-NETBAR;CN;Yongkang Shiji Internet Bar;APNIC 
218.75.99.0;218.75.99.3;WEISHENG-COLTD;CN;Donggan Hospital;APNIC 
... 

Wie kann ich das mit awk oder bash machen?

+1

Haben Sie vor, das zweite 'descr'-Feld zu ignorieren, oder behandeln Sie' NULL' als Sonderfall? – Aaron

+0

Ignorieren. Ich brauche nur zuerst descr. Vielen Dank. – phe

+1

Im allgemeinen Fall ist das Analysieren von 'whois' eine nie endende Aufgabe, da verschiedene Datenbanken unterschiedliche Felder und unterschiedliche Datenbankformate verwenden, und sogar innerhalb einer einzigen Datenbank scheint sich die Semantik einiger Felder im Laufe der Zeit geändert zu haben. – tripleee

Antwort

2

Mit awk können Sie tun:

awk -F ':[[:blank:]]*' '/inetnum:/{ip=$2; sub(/ +- +/, ";", ip)} /netname:/{nn=$2} 
    /country:/{ct=$2} ds=="" && /descr:/{ds=$2} 
    /source:/{print ip, nn, ct, ds, $2; ds=""}' OFS=";" file 

Ausgang:

218.75.100.64;218.75.100.67;YONGKANG-SHIJI-NETBAR;CN;Yongkang Shiji Internet Bar;APNIC 
218.75.99.0;218.75.99.3;WEISHENG-COLTD;CN;Donggan Hospital;APNIC 

Dieses zweite descr Feld ignorieren.

Verwandte Themen