Sed awk форматирование текста - PullRequest
0 голосов
/ 09 октября 2019

Я бы хотел отфильтровать и упорядочить текстовые файлы с помощью чего-то вроде awk или sed. Это не обязательно должна быть одна команда, маленький bash-скрипт тоже подойдет.

#
home: address01
name: name01
info: info01
number: number01
company: company01
#
name: name02
company: company02
info: info02
home: home02
#
company: company03
home: address03
name: name03
info: info03
info: info032
number: number03
company: company032
#
name: name04
info: info04
company: company04
number: number04
number: number042
info: info042

Мне нужны только имя, номер и информация. Всегда есть только одно имя, но может быть 0,1 или 2 числа и информация. # - единственное, что является последовательным и всегда на одном месте.

вывод должен быть:

name01,number01,,info01,
name02,,,info02,
name03,number03,,info03,info032
name04,number04,number042,info04,info042

Что я пробовал до сих пор:

awk -v OFS=',' '{split($0,a,": ")} /^name:/{name=a[2]} /^number:/{number=a[2]} /^info:/{info=a[2]; print name,number,info}' > dump.csv

Спасибо за вашу помощь и, пожалуйста, извините, что я сделал что-то не так.

1 Ответ

0 голосов
/ 10 октября 2019

Рассмотрите возможность изменения логики для печати на «#» или после последней строки (при условии, что последний блок не завершен с #):

awk -v OFS=',' '
{split($0,a,": ")}
/^name:/{name=a[2]}
/^number:/{number=a[2]}
/^info:/{info=a[2]}
/^#/ { print name,number,info}
END { print name,number,info}
' < w.txt  > dump.csv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...