Shell-Script

awk 腳本僅在我手動編輯文本文件時才有效

  • February 4, 2017

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

引用自:https://unix.stackexchange.com/questions/341509