AWK para criar um arquivo .csv

2

Estou trabalhando com este arquivo de texto:

Device ID: BIOTERIO
  IP address: 148.000.00.189
Interface: GigabitEthernet1/0/6,  Port ID (outgoing port): GigabitEthernet0/1
          Device ID: N7K-LAN(JAF1651ANDL)
  IP address: 148.000.0.192
Interface: GigabitEthernet1/0/1,  Port ID (outgoing port): Ethernet7/23
Device ID: LAB_PESADO
  IP address: 148.000.000.130
Interface: GigabitEthernet1/0/11,  Port ID (outgoing port): GigabitEthernet0/1
  IP address: 148.000.000.130
Device ID: Arquitectura_Salones
  IP address: 148.000.000.61
Interface: GigabitEthernet1/0/9,  Port ID (outgoing port): GigabitEthernet0/49
  IP address: 148.000.000.61
Device ID: CIVIL_253
  IP address: 148.000.000.253
          Interface: GigabitEthernet1/0/4,  Port ID (outgoing port): GigabitEthernet1/0/52
  IP address: 148.000.000.253
Device ID: Arquitectura
  IP address: 148.000.000.253
Interface: GigabitEthernet1/0/3,  Port ID (outgoing port): GigabitEthernet0/1
  IP address: 148.000.000.253
Device ID: ING_CIVIL
  IP address: 148.000.000.251
Interface: GigabitEthernet1/0/7,  Port ID (outgoing port): GigabitEthernet0/2
  IP address: 148.000.000.251
Device ID: ING_CIVIL_DIR
  IP address: 148.000.0.188
Interface: GigabitEthernet1/0/10,  Port ID (outgoing port): GigabitEthernet0/2
Device ID: Ingenieria_Posgrado
  IP address: 148.000.000.253
Interface: GigabitEthernet1/0/8,  Port ID (outgoing port): GigabitEthernet0/1
  IP address: 148.000.000.253
Device ID: Biblio_Barragan
  IP address: 148.000.000.61
Interface: GigabitEthernet1/0/2,  Port ID (outgoing port): GigabitEthernet0/1
  IP address: 148.000.000.61
Device ID: Electronica_Edif_3
            IP address: 148.000.000.253
Interface: GigabitEthernet1/0/5,  Port ID (outgoing port): GigabitEthernet0/1
  IP address: 148.000.000.253

Gostaria de obter um arquivo .csv assim:

device_id,ip_address
BIOTERIO, 148.000.00.189
N7K-LAN(JAF1651ANDL), 148.000.0.192
LAB_PESADO, 148.000.000.130
Arquitectura_Salones, 148.000.000.61
CIVIL_253, 148.000.000.253
Arquitectura, 148.000.000.253
ING_CIVIL, 148.000.000.251
ING_CIVIL_DIR, 148.000.0.188
Ingenieria_Posgrado, 148.000.000.253
Biblio_Barragan, 148.000.000.61
Electronica_Edif_3, 148.000.000.253

Até agora escrevi este código awk:

awk '
    BEGIN {
        RS = "\n\n"
        FS = "\n"
        OFS = ","
        print "device_id,ip_address"
    }
    {
        for(i=1; i<=NF; i++) {
            split($i, a, ":");
            k[a[1]] = a[2]
        }
            print k["Device ID"], k["IP address"]

    }' tabladetallada.dat > dispositivoss.csv

Mas é isso que eu tenho:

device_id,ip_address
 Electronica_Edif_3
,

Alguma ajuda?

Obrigado antecipadamente.

    
por Cesar Alejandro Villegas Yepez 09.03.2017 / 18:28

1 resposta

1

Não há necessidade de ser extravagante:

awk 'BEGIN{RS="Device ID:"}{print $1", "$4}' file

e apenas substitua a primeira linha pelo cabeçalho.

    
por 09.03.2017 / 19:17