1

説明がなく、シャットダウンされていないインターフェイスの cisco 構成をスキャンしています。

インターフェイスに説明がない場合は、シャットダウンする必要があります。

インターフェイスに説明がある場合、これは常にインターフェイスの後の最初の行です。awk を使用してすべてのインターフェイスと説明を表示するスクリプトを作成しましたが、もう少し複雑なことを行う方法がわかりません。

これを実行しました(「インターフェイス」に続く行に「説明」がない場合)。

awk '{if ((lastline ~ /^interface/) && ($0 !~ /^ description/)) {print FILENAME ";" lastline ORS FILENAME ";" $0} lastline=$0}'

しかし問題は、一部の行が「interface」で始まり、構成がまったくないか、何か他のものがあることです。だから間違った情報を拾っている。

「インターフェース」という単語で始まる行の各インスタンス間のすべての行を調べるものが必要であり、間に「説明」または「シャットダウン」で始まる行がない場合は、インターフェース行を印刷する必要がありますファイル名で。私にとっては少し複雑です、私は初心者です!:(

たとえば、次のファイルです。

interface GigabitEthernet3/23
logging event link-status
shutdown
interface GigabitEthernet3/24
interface Vlan1
description 'VLAN 1'
interface Vlan2
no ip address
interface Vlan4
shutdown

戻ります

interface GigabitEthernet3/24
interface Vlan2
4

3 に答える 3

1

このようないくつか

awk '!/shutdown|description/ {print FILENAME " - "$1 FS $2}' RS="!" file1.txt
file1.txt - interface GigabitEthernet3/24
file1.txt - interface Vlan2

ここでは、レコード セレクターを に設定し、!含まれていない行を出力します。shutdown or description


更新版

awk '!/shutdown|description/ && NF {print FILENAME " - " RS,$1}' RS="interface" file1.txt
file1.txt - interface GigabitEthernet3/24
file1.txt - interface Vlan2

これはinterfaceRS として使用します。すべてが RS で複数の文字をサポートしているgnu awkわけではないため、これは でのみ機能する可能性があります。awk


awk移植性を高めるために、RS を使用しないバージョンを追加しました。

awk '/^interface/ {if (!f && NR>1) print FILENAME,"-",s;s=$0;f=0} /^shutdown|^description/ {f=1} END { if (!f) print FILENAME,"-",s}' file1.txt

そしてもっと読みやすい:

awk '
    /^interface/ {
        if (!f && NR>1) 
            print FILENAME,"-",s
        s=$0
        f=0
        }
    /^shutdown|^description/ {
        f=1
        }
    END {
        if (!f) 
            print FILENAME,"-",s
        }
    ' file1.txt
于 2013-10-21T12:00:28.790 に答える
0

行ごとに処理しないでください。レコード区切りとして「interface」を使用します。インターフェースの残りの行は $0 に入り、インターフェース名は $1 になります。

于 2013-10-21T12:04:09.677 に答える