首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >行的特定打印

行的特定打印
EN

Stack Overflow用户
提问于 2016-05-26 12:03:24
回答 2查看 56关注 0票数 1

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

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

一个典型的数据看起来像(图像附件)在这里输入图像描述

代码语言:javascript
运行
复制
 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

所需的输出是:

代码语言:javascript
运行
复制
  969.0                  306.9  356.7  309.9
  500.0                  318.9         318.9
  300.0                  344.2         344.2

数据模式有几行类似的代码。

我试过的是

代码语言:javascript
运行
复制
egrep -R "`grep -A1 "1000.0" file |awk '{print $1}'`|500.0|300.0" file

它显示的结果如下:参数列表太长,,请查看它,并提出最好的解决方案!

EN

回答 2

Stack Overflow用户

发布于 2016-05-26 12:40:34

您没有说明如何处理键值的重复出现,也没有说明是否必须按此顺序发生500.0和300.0,因此,这可能是您真正想要的,也可能不是您真正想要的,但是它适用于已发布的示例输入,以及您到目前为止告诉我们的内容:

代码语言:javascript
运行
复制
$ 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要求(未经测试):

代码语言:javascript
运行
复制
$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
EN

Stack Overflow用户

发布于 2016-06-02 08:01:15

只有grep的解决方案:

代码语言:javascript
运行
复制
grep -A1 "1000.0" file | grep -v "1000.0" && grep -E '500.0|300.0' file

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37460340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档