awk 脚本仅在我手动编辑文本文件时才有效

awk 脚本仅在我手动编辑文本文件时才有效

我用来awk组织文本文件中的信息(它包含从终端获取的交换机的 CDP 邻居信息),该文件如下所示:

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

我希望它看起来像这样:

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

我正在使用的 awk 脚本是这样的:

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

它会查找第一个字段超过 16 个字符的行,并用空格替换换行符。

当我运行 awk 脚本时,结果如下所示:

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

我注意到如果我用 gedit 打开原始文本文件(CDPyPuertos.dat)并编辑某些内容(例如在文件末尾添加空格或更改某些字符),则 awk 脚本可以正常工作,但所有这些都在 Expect 脚本中,所以它应该是自动的,我也尝试将文件的格式从 ascci 更改为 UTF-8 但它不起作用,如果我使用不同的扩展名也是如此( .txt .dat .dos)

有谁知道为什么会发生这种情况?

提前致谢

更新:

如果我输入: cat -et CDPyPuerto.dat

结果是这样的:

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$

当我用 gedit 打开 CDPyPuerto.dat 并编辑一些内容后,所有内容都^M$变成了$.

我怎样才能自动完成呢?

答案1

我解决这个问题的方法是删除 CR 字符(如 的^M输出所示cat -et):

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

相关内容