【问题标题】:awk match search patterns and print immediate next line's 4th & 5th valuesawk 匹配搜索模式并立即打印下一行的第 4 和第 5 个值
【发布时间】:2014-12-11 23:37:43
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 欢迎来到 SO!请对输入文件的内容使用引用功能,以便清楚地看到换行符。

标签: unix awk nawk


【解决方案1】:

这很简单:

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

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

【讨论】:

    【解决方案2】:
    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 
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-07
          • 2022-10-17
          • 1970-01-01
          • 2013-04-03
          • 2013-02-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多