我有这样的要求,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
awk解决方案
如果我们得到带有散列的行,请将其存储在变量 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
$