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。する必要があります)

なぜこれが起こるのか知っている人がいますか?

事前にありがとう

修正する:

次のように入力すると: 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

おすすめ記事