show mac address table
スイッチに1000個の項目をリストする必要があるという要件があります。
ファイル1: switch_1#mac アドレステーブルの表示 AA:AA:AA:AA:AA:AA ポート 47 BB:BB:BB:BB:BB:BBポート48 。 。 。 DD:DD:DD:DD:DD:DD ポート 50
ファイル2: switch_2#mac アドレステーブルを表示 AA:AA:AA:AA:AA:AA ポート 47 BB:BB:BB:BB:BB:BBポート48 。 。 。 DD:DD:DD:DD:DD:DD ポート 45
含まれている行を表示する方法を見つける必要がありますDD:DD:DD:DD:DD:DD
。そのような場合は、上記の行を検索してホスト名を含む行を印刷する必要があります。
したがって、出力は次のようになります。
switch_1#mac アドレステーブルの表示 DD:DD:DD:DD:DD:DD ポート 50 switch_2#mac アドレステーブルを表示 DD:DD:DD:DD:DD:DD ポート 45
file1
、file2
同じディレクトリに保存されます(これは単なる例であり、約100個以上のファイル/スイッチがあり、MACはスイッチ名でフィルタリングする必要があります)
答え1
奇妙なソリューション
ハッシュを含む行を取得したら、それを変数aに保存します。
一致するMACアドレスを持つ行を取得すると、変数aが現在の行と共に印刷されます。
$ awk '/#/{a=$0}/^DD:DD:DD:DD:DD:DD/{print a"\n"$0}' file1 file2
switch_1#show mac address table
DD:DD:DD:DD:DD:DD port 50
switch_2#show mac address table
DD:DD:DD:DD:DD:DD port 45
$
sedソリューション
ハッシュを含む行を取得したら、それを予約済みスペース(h
)に入れます。
一致するMACアドレスを持つ行を取得すると、パターンスペースに追加(H
)、ストレージスペースをパターンスペースにコピー(g
)、パターンスペースを印刷(p
)
$ sed -n '/#/h;/^DD:DD:DD:DD:DD:DD/{H;g;p}' file1 file2
switch_1#show mac address table
DD:DD:DD:DD:DD:DD port 50
switch_2#show mac address table
DD:DD:DD:DD:DD:DD port 45
$