一致する行と他のパターンに一致する最新の前の行を表示します。

一致する行と他のパターンに一致する最新の前の行を表示します。

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

file1file2同じディレクトリに保存されます(これは単なる例であり、約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
$

関連情報