0

我有一个如下所示的模式。我正在尝试提取多行记录(从 Dr Group Name 到第一个空白行)。我试过了:

awk 'BEGIN{RS="\n" } /DR Group Name: \\Data Replication\\mc_wtec_1/,/\n/'

但它让我获得了所有四张唱片。

Storage WWN: 50001FE15007DBA0
    DR Group Name: \Data Replication\mc_wtec_1
        WWID list:
                   600508B4001078FD0002400001800000

    DR Group Name: \Data Replication\vanilla_dr
        WWID list:
                   600508B4001078F10002400002D20000


Storage WWN: 50001FE15007DBD0
    DR Group Name: \Data Replication\mc_wtec_1
        WWID list:
                   600508B4001078FD0002400001800000

    DR Group Name: \Data Replication\vanilla_dr
        WWID list:
                   600508B4001078F10002400002D20000
4

4 回答 4

2

RS="\n"部分很奇怪;这不是默认的记录分隔符吗?删除它对匹配的输出没有影响,我不希望它。

最后的图案也是假的。您正在搜索包含换行符的行,但从awk输入行中删除了换行符,因此它不匹配任何内容,因此模式范围从第一DR Group Name行延伸到文件末尾。

你想找一个空行;那就是/^$/。因此:

$ awk '/DR Group Name: \\Data Replication\\mc_wtec_1/,/^$/' data
    DR Group Name: \Data Replication\mc_wtec_1
        WWID list:
                   600508B4001078FD0002400001800000

    DR Group Name: \Data Replication\mc_wtec_1
        WWID list:
                   600508B4001078FD0002400001800000
$
于 2013-10-13T13:54:44.553 回答
0
awk '/wtec_1/ {ok=1} /^$/ {ok=0} {if(ok){print $0}}' filename

做你似乎问过的事情。基于样本。

于 2013-10-13T13:01:00.507 回答
0

看起来您只需要删除“Storage WWN”行,然后您将获得每条记录:

< input sed '/^Storage WWN/d' | awk '{ print "Record: ", $0 }' RS=

例如,要获取第三条记录:

< input sed '/^Storage WWN/d' | awk NR==3 RS=

要获取 mc_wtec_1,请尝试:

< input sed '/^Storage WWN/d' | awk '/mc_wtec_1/' RS=

(在上述所有内容中,假设您的输入数据位于名为“input”的文件中。该文件可以指定为参数,sed而不是由 shell 重定向,并且不需要在“sed”之前进行重定向。 )

于 2013-10-13T13:01:10.010 回答
0

搜索模式并在其后打印两行:

awk '/ DR Group Name: \Data Replication\mc_wtec_1/{print;for(i=1;i<=3;i++){getline;print}}' filename

或者更好的方法

在脚本中添加正则表达式搜索模式

awk '/ DR Group Name: \\Data Replication\\mc_wtec_1/,/([A-Z]+[0-9]+)/' filename

([A-Z]+[0-9]+)会寻找600508B4001078FD0002400001800000模式

输出:

DR Group Name: \Data Replication\mc_wtec_1
    WWID list:
               600508B4001078FD0002400001800000

DR Group Name: \Data Replication\mc_wtec_1
    WWID list:
               600508B4001078FD000240000180000000
于 2013-10-13T13:02:48.287 回答