如何从多行标准输入中仅提取特定的字符串匹配行

时间:2019-05-14 10:27:05

标签: bash awk sed

我有一个标准输入,它是从另一个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字符串输入操作魔术只有基本的了解,因此不胜感激。

1 个答案:

答案 0 :(得分:3)

不需要魔术-在输入中看到值时将其保存在数组中,并在按下---行时将其打印出来:

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