Как извлечь только определенные строки, совпадающие со строками, из стандартного ввода из нескольких строк - PullRequest
0 голосов
/ 14 мая 2019

У меня есть стандартный входной канал из другой выходной функции 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 Ответ

3 голосов
/ 14 мая 2019

Никакой магии не требуется - сохраняйте значения в массиве, когда они видны на входе, и печатайте их, когда вы нажимаете строку ---:

$ awk -F'=' -v OFS=',' '/---/{print v["fruit"], v["car"]} {v[$1]=$2}' file
apple,bmw
orange,ford
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...