O script Awk funciona somente se eu editar o arquivo de texto manualmente

0

Estou usando awk para organizar as informações em um arquivo de texto (Ele contém informações de vizinhos do CDP de um switch tirado do terminal), o arquivo se parece com isto:

Device ID Local Intrfce
BIOTERIO Gig 1/0/6
N7K-LAN(JAF1651ANDL)
Gig 1/0/1 145
LAB_PESADO Gig 1/0/11
Arquitectura_Salones
Gig 1/0/9 147
CIVIL_253 Gig 1/0/4
Arquitectura Gig 1/0/3
ING_CIVIL_DIR Gig 1/0/10
ING_CIVIL Gig 1/0/7
Ingenieria_Posgrado
Gig 1/0/8 132
Biblio_Barragan Gig 1/0/2
Electronica_Edif_3
Gig 1/0/5 173
Barragan_3750>exit
Connection closed by foreign host.
]0;cesar@cesar-HP-Pavilion-15-Note

E eu quero que seja assim:

Device ID Local Intrfce
BIOTERIO Gig 1/0/6
N7K-LAN(JAF1651ANDL) Gig 1/0/1 145
LAB_PESADO Gig 1/0/11
Arquitectura_Salones Gig 1/0/9 147
CIVIL_253 Gig 1/0/4
Arquitectura Gig 1/0/3
ING_CIVIL_DIR Gig 1/0/10
ING_CIVIL Gig 1/0/7
Ingenieria_Posgrado Gig 1/0/8 132
Biblio_Barragan Gig 1/0/2
Electronica_Edif_3 Gig 1/0/5 173
Barragan_3750>exit Connection closed by foreign host.
]0;cesar@cesar-HP-Pavilion-15-Note

O script awk que estou usando é o seguinte:

awk '{printf "%s%s", $0, (length($1) > 16) ? OFS : ORS}' CDPyPuerto.dat > TablaCDP.dat

Procura as linhas em que o primeiro campo tem mais de 16 caracteres e substitui a linha de quebra por um espaço.

Quando eu executo o script awk, o resultado é assim:

Device ID Local Intrfce 
BIOTERIO Gig 1/0/6 
N7K-LAN(JAF1651ANDL)
  Gig 1/0/1 172 
LAB_PESADO Gig 1/0/11 
Arquitectura_Salones
  Gig 1/0/9 176 
CIVIL_253 Gig 1/0/4 
Arquitectura Gig 1/0/3 
ING_CIVIL_DIR Gig 1/0/10 
ING_CIVIL Gig 1/0/7 
Ingenieria_Posgrado
  Gig 1/0/8 159 
Biblio_Barragan Gig 1/0/2 
Electronica_Edif_3
  Gig 1/0/5 141 
Barragan_3750>exit
Connection closed by foreign host.

]0;cesar@cesar-HP-Pavilion-15-Note

Tenho notado que se eu abrir o arquivo de texto orginal (CDPyPuertos.dat) com gedit e editar algo (por exemplo, adicionar um espaço no final do arquivo ou alterar algum caractere) o script awk funciona bem , mas tudo isso é em um script Expect, por isso deve ser automático, também eu tentei mudar o formato do arquivo de ascci para UTF-8, mas não funcionou, o mesmo se eu usar diferente extensões (.txt .dat .dos)

Alguém sabe por que isso está acontecendo?

Obrigado antecipadamente

Atualização:

Se eu digitar: cat -et CDPyPuerto.dat

O resultado é este:

Device ID Local Intrfce$
BIOTERIO Gig 1/0/6$
N7K-LAN(JAF1651ANDL)^M$
Gig 1/0/1 165$
LAB_PESADO Gig 1/0/11$
Arquitectura_Salones^M$
Gig 1/0/9 173$
CIVIL_253 Gig 1/0/4$
Arquitectura Gig 1/0/3$
ING_CIVIL_DIR Gig 1/0/10$
ING_CIVIL Gig 1/0/7$
Ingenieria_Posgrado^M$
Gig 1/0/8 152$
Biblio_Barragan Gig 1/0/2$
Electronica_Edif_3^M$
Gig 1/0/5 133$
Barragan_3750>exit^M$
Connection closed by foreign host.^M$
^[]0;cesar@cesar-HP-Pavilion-15-Note$

Depois que eu abro o CDPyPuerto.dat com o gedit e edito algo, todo o ^M$ se transforma em $ .

Como posso fazer isso automaticamente?

    
por Cesar Alejandro Villegas Yepez 31.01.2017 / 17:16

1 resposta

2

A maneira de resolver isso é remover os caracteres CR (representados como ^M na saída de cat -et ):

tr -d '\r' < CDPyPuerto.dat |
    awk '{printf "%s%s", $0, (length($1) > 16) ? OFS : ORS}' > TablaCDP.dat
    
por 31.01.2017 / 17:50