在匹配的单词之后打印下一行包含“:”的N行 - 使用oneliner

时间:2014-11-20 18:05:24

标签: unix awk sed solaris

我正在尝试从赛门铁克的“lltstat”输出中提取所需的行

以前,我正在使用这段代码(HOST_VAR被循环中所需的主机替换,如serverA):

lltstat -nvv active | awk '/$HOST_VAR/{x=NR+2;next}(NR<=x){print}'

但现在情况发生了变化,行数变化(可以是0,但也是10 ..)

输出如下:

LLT node information:
Node                 State    Link  Status  Address
* 0 serverA           OPEN
                              eth0   UP      AA:BB:DD:CC:00:11
                              eth1   UP      AA:BB:DD:CC:00:11
                              igbe3   UP      AA:BB:DD:CC:00:11
 1 Bserver           OPEN
                              igbe2   UP      AA:BB:DD:CC:00:11
                              ixgbe1   DOWN      AA:BB:DD:CC:00:11
                              eth3   UP      AA:BB:DD:CC:00:11
我可以使用的工具只有sed和awk(grep只是最简单的没有正则表达式等) 我正在考虑使用服务器名称;下一个;并打印所有具有“:”的行,因为它应该只在那些MAC地址中,但我在awk中不是那么好:( 感谢您提供任何有用的提示

1 个答案:

答案 0 :(得分:2)

假设OPEN仅出现在服务器行上,这应该可以。

lltstat -nvv active | awk -v HOST_VAR=$HOST_VAR '$0 ~ HOST_VAR{a=1; next} a&&/OPEN/{exit} a{print}'