从字段:值格式转换为CSV

时间:2019-01-22 22:14:06

标签: csv text-processing format-conversion

我有一个以下格式的文件(很好):

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 :(得分:2)

从伟大的米勒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