Преобразование из поля: формат значения в CSV - PullRequest
0 голосов
/ 23 января 2019

У меня есть файл в следующем формате (ну, вроде):

RECORD_SEPARATOR
foo: some foo value
bar: another value
baz: 123
RECORD_SEPARATOR
foo: another foo value
bar: yet another value
baz: 345
RECORD_SEPARATOR
foo: a third foo
RECORD_SEPARATOR
bar: a fourth bar
baz: 111

и так далее.Ключевым моментом здесь является то, что не во всех записях присутствуют все поля.

Мой вопрос: Какой супер-простой способ преобразовать эти данные в формат CSV?То есть в моем примере

foo,bar,baz
some foo value,another value,123
another foo value,yet another value,345
a third foo,,
,a fourth bar,111

Конечно, вы можете написать для этого сценарий awk (или perl, или Python), но я надеюсь, что что-то уже существует, или какой-то трюк, чтобы сделать этоочень короткий сценарий.

Примечание: я, конечно, ищу что-то ориентированное на Unix-командную строку.

1 Ответ

0 голосов
/ 23 января 2019

Привет с великим Миллером http://johnkerl.org/miller/doc, начиная с

foo: some foo value
bar: another value
baz: 123

foo: another foo value
bar: yet another value
baz: 345

foo: a third foo

bar: a fourth bar
baz: 111

вы можете запустить

mlr --x2p --ips ": " --barred cat then unsparsify --fill-with "" inputFile

и получим этот симпатичный вывод на печать

+-------------------+-------------------+-----+
| foo               | bar               | baz |
+-------------------+-------------------+-----+
| some foo value    | another value     | 123 |
| another foo value | yet another value | 345 |
| a third foo       | -                 | -   |
| -                 | a fourth bar      | 111 |
+-------------------+-------------------+-----+

Если вы хотите CSV, запустите

mlr --x2c --ips ": " cat then unsparsify --fill-with "" inputFile

и у вас будет

foo,bar,baz
some foo value,another value,123
another foo value,yet another value,345
a third foo,,
,a fourth bar,111
...