首页 > 解决方案 > 如何从多行标准输入中仅提取特定的字符串匹配行

问题描述

我有一个从示例表单中的另一个 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 字符串输入操作魔术的基本知识,所以任何帮助将不胜感激。

标签: bashawksed

解决方案


不需要魔法 - 当它们在输入中看到时将值保存在数组中,并在您点击---一行时打印它们:

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

推荐阅读