Awk 行的特定打印

Awk 行的特定打印,awk,grep,Awk,Grep,我有包含几行的数据。有些行以值1000.0、500.0、300.0开头,在这些行之间还有其他行。我想要的是: 打印包含1000.0的行之后的行 后跟包含500.0的行 后跟包含300.0的行 典型数据如下所示(附图片): 所需输出为: 969.0 306.9 356.7 309.9 500.0 318.9 318.9 300.0 344.2 3

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

  • 打印包含1000.0的行之后的行
  • 后跟包含500.0的行
  • 后跟包含300.0的行
典型数据如下所示(附图片):

所需输出为:

  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

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

您没有说明如何处理键值的重复出现,或者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要求(未经测试):


grep
唯一的解决方案:

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

希望有帮助。

事实上,这些值是按顺序出现的。我的意思是这种模式有好几次出现。此外,有时1000.0缺失,但存在500.0和300.0,那么我们需要忽略这些值,转到下一个模式,其中1000.0、500.0、300.0同时出现。我检查了输出,它似乎按照我的要求工作!是的,考虑到这些要求,它将完全满足您的要求。与前一种情况一样,如果在1000.0之前的几行之前有一行,以43250开头,并且我们希望包含该行,而其余行与旧行相同,那么awk脚本中需要做哪些修改。结果如下:打印包含43520的行打印包含1000.0的行之后的行,然后是包含500.0的行,最后是包含300.0的行。我在答案末尾添加了一个修改过的脚本。如果这还不行,那么就发布一个新问题。谢谢你的帮助,但不幸的是,第二个代码没有给出期望的结果!
$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 }
grep -A1 "1000.0" file | grep -v "1000.0" && grep -E '500.0|300.0' file