特定的行打印

时间:2016-05-26 12:03:24

标签: awk grep

我的数据包含多行。一些行以值1000.0,500.0,300.0开头,并且在这些行之间还有其他行。我想要的是:

  • 在包含1000.0
  • 的行后面打印行
  • 后面是行CONTAINING 500.0
  • 后面是行CONTAINING 300.0

典型数据看起来像(附图片)enter image description here

 1000.0    -13                                                               
  969.0                  306.9  356.7  309.9
  850.0                  305.0  324.9  306.2
  700.0                  309.1  315.3  309.4
  500.0                  318.9         318.9
  400.0                  331.4         331.4
  300.0                  344.2         344.2

所需的输出是:

  969.0                  306.9  356.7  309.9
  500.0                  318.9         318.9
  300.0                  344.2         344.2

数据模式有几行这样的行。

我试过的是

egrep -R "`grep -A1 "1000.0" file |awk '{print $1}'`|500.0|300.0" file

它显示结果为:参数列表太长请查看并建议最佳解决方案!

2 个答案:

答案 0 :(得分:1)

您没有说明如何处理重复值的重复出现或500.0和300.0是否按顺序发生,因此这可能是您真正想要的,也可能不是,但它适用于发布的样本输入和你到目前为止告诉我们的事情:

$ cat tst.awk
f == 1             { print; f=2 }
$1 == "1000.0"     { f=1 }
f && $1 == "500.0" { print }
f && $1 == "300.0" { print; f=0 }

$ awk -f tst.awk file
  969.0                  306.9  356.7  309.9
  500.0                  318.9         318.9
  300.0                  344.2         344.2

在评论中处理新的43520要求(未经测试):

$1 == "43520"      { s = $0 }
f == 1             { print s ORS $0; f=2 }
$1 == "1000.0"     { f=1 }
f && $1 == "500.0" { print }
f && $1 == "300.0" { print; f=0 }

答案 1 :(得分:0)

grep解决方案:

grep -A1 "1000.0" file | grep -v "1000.0" && grep -E '500.0|300.0' file

希望它有所帮助。