我的数据包含多行。一些行以值1000.0,500.0,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
它显示结果为:参数列表太长请查看并建议最佳解决方案!
答案 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
希望它有所帮助。