Shell-Script
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$
變為$
.我怎樣才能自動完成?
我解決這個問題的方法是刪除 CR 字元(
^M
在輸出中表示cat -et
):tr -d '\r' < CDPyPuerto.dat | awk '{printf "%s%s", $0, (length($1) > 16) ? OFS : ORS}' > TablaCDP.dat