вывод файла CSV из оболочки - PullRequest
       13

вывод файла CSV из оболочки

3 голосов
/ 15 февраля 2012

Привет, у меня есть входной файл в этом формате.

[Header A]
key1 value1
key2 value2

[Header B]
header1    header2    header3   // separated by tab
1            2          3     //separated by tab
a            b          c     //separated by tab

[Header C]
a
b
c

Я должен вывести все, что находится в HeaderB, в виде другого CSV-файла. Поэтому CSV-файл будет выглядеть как

header1,header2,header3
1,2,3
a,b,c

. Я написал для этого скрипт на Python, но с требованиемсделать это с помощью команды оболочки.Я не имею большого представления о написании сложных команд оболочки.Может ли кто-нибудь помочь мне.

Спасибо

Ответы [ 2 ]

3 голосов
/ 15 февраля 2012

Это будет работать для вас:

awk -F'\t' '/\[Header B\]/{f=1;next} /^$/{f=0} f{gsub(/\t/,",");print}' file

Пример

$ awk -F'\t' '/\[Header B\]/{f=1;next} /^$/{f=0} f{gsub(/\t/,",");print}' file
header1,header2,header3
1,2,3
a,b,c
1 голос
/ 15 февраля 2012

Вот команда sed.

sed -n '/^\[Header B]/,/^$/s/\t/,/gp' file.ini >section.csv

Сценарий прост; он состоит из части «адрес» для выбора строк между заголовком и следующей пустой строкой и части действия для замены табуляции запятой глобально (все вхождения в строке) и печати, если была выполнена подстановка (так удобно, только строки) на котором была вкладка будет напечатано).

Если ваш sed не поддерживает экранирование \t для табуляции, вам нужно будет вставить буквенную вкладку (в некоторых оболочках вы должны набрать ctrl-V tab в командной строке).

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