我用来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