2

如果它们匹配打印 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 -

例如:我正在匹配 17496 和 2857,如果搜索模式在一行中匹配,需要使用 awk 或 sed 获取下一行的第 4 和第 5 个值就可以了。

输出就像

66319 2857

在匹配模式时减少我的重复

谢谢

4

4 回答 4

2

这很简单:

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

$4 == 17496 && $5 == 2857 {
    lastMatched = 1;
}
于 2014-12-12T00:33:40.747 回答
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 
于 2014-12-12T05:25:31.467 回答
0

如果我看到匹配,我会举起旗帜,如果旗帜升起,我会降低旗帜并打印数据。

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

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

于 2014-12-12T22:08:50.493 回答
0

我只是用下面的线修复了它

nawk '/'$4'  '$5'/{getline;print $4,$5}'
于 2015-06-16T16:53:35.873 回答