awk匹配搜索模式并立即打印下一行的第4个&第五个值

时间:2014-12-11 23:37:43

标签: unix awk nawk

如果匹配打印Nextline的第4和第5值,我想匹配第4和第5值的模式。

以下是输入文件

CL3-A3-2  0    0 17496  2851 P-VOL PAIR ASYNC      0  2850 -
CL3-C2-5  0    0 66319  2850 S-VOL PAIR ASYNC      0  2851 -
CL3-A3-2  0    1 17496  2852 P-VOL PAIR ASYNC      0  2851 -
CL3-C2-5  0    1 66319  2851 S-VOL PAIR ASYNC      0  2852 -
CL3-A3-2  0    2 17496  2853 P-VOL PAIR ASYNC      0  2852 -
CL3-C2-5  0    2 66319  2852 S-VOL PAIR ASYNC      0  2853 -
CL3-A3-2  0    6 17496  2857 P-VOL PAIR ASYNC      0  2857 -
CL3-C2-5  0    3 66319  2857 S-VOL PAIR ASYNC      0  2857 -
CL3-A3-2  0    6 47496  2857 P-VOL PAIR ASYNC      0  2857 -
CL3-C2-5  0    3 18496  2857 S-VOL PAIR ASYNC      0  2857 -

对于Ex:我匹配17496和2857,如果搜索模式匹配一​​行,需要使用awk或sed获取直接下一行的第4和第5个值。

输出就像

66319 2857

在匹配模式

时减少重复

由于

4 个答案:

答案 0 :(得分:2)

这很简单:

lastMatched {
    print $4, $5;
    lastMatched = 0;
}

$4 == 17496 && $5 == 2857 {
    lastMatched = 1;
}

答案 1 :(得分:1)

awk '{if (flag==1) {print $4,$5; flag=0}}
     {if (($4==17496)&&($5==2857))flag=1}' inputfile

如果您只需要一个匹配并且想要在之后终止,只需添加退出。

awk '{if (flag==1) {print $4,$5; exit}}
     {if (($4==17496)&&($5==2857)) flag=1}' inputfile 

答案 2 :(得分:0)

如果我看到匹配,我会举起一个标志,如果标志被抬起,我会降低标志并打印数据。

% awk 'p==1{p=0;print $4, $5} $4==17496&&$5==2857{p=1}' your.data
66319 2857
%

语句的顺序至关重要,如果我先设置标志然后检查它,我会为同一行打印$4$5 ...

答案 3 :(得分:0)

我刚用下面的行修好了

nawk '/'$4'  '$5'/{getline;print $4,$5}'