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
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?
Tags awk expect scripting shell-script gawk