【问题标题】:How to extract only specific string matching lines from a multiple lines standard input如何从多行标准输入中仅提取特定的字符串匹配行
【发布时间】:2019-05-14 20:01:52
【问题描述】:

我有一个标准输入从示例表单中的另一个 bash 函数输出管道传输:

fruit=apple
dog=doberman
car=bmw
flower=tulip
---
fruit=orange
dog=corgy
car=ford
flower=rose
---

...如此重复数千次...

从这个多次重复的管道标准输出中,我只想提取与水果和汽车匹配的值,如下所示:

apple
bmw
---
orange
ford
---

如果 sed/awk 魔法可以输出类似 csv 表格的格式,那就更好了,像这样:

apple,bmw
orange,ford

我只有 bash 字符串输入操作魔术方面的基本知识,因此我们将不胜感激。

【问题讨论】:

  • 您好。你试过什么代码?你必须只使用 bash/awk/sed 吗?你考虑过 perl 吗?

标签: bash awk sed


【解决方案1】:

无需魔法 - 当输入中的值出现时将其保存在数组中,并在您点击--- 行时打印它们:

$ awk -F'=' -v OFS=',' '/---/{print v["fruit"], v["car"]} {v[$1]=$2}' file
apple,bmw
orange,ford

【讨论】:

  • 您没有重置v,如果记录缺少其中一个键,它将错误地重复先前的值。
  • @kvantour 正确,我也没有考虑任何包含--- 的非终止行,也没有考虑在记录中重复相同键的情况。我假设如果其中任何一个可能发生,OP 会在她的示例中显示它。
猜你喜欢
  • 2021-06-19
  • 2022-09-24
  • 2015-10-11
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多