从shell输出CSV文件

时间:2012-02-15 05:34:41

标签: linux bash shell csv awk

嗨我有这种格式的输入文件。

[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脚本来执行此操作,但要求它通过shell命令执行此操作。我对编写复杂的shell命令并不太了解。有人可以帮助我。

由于

2 个答案:

答案 0 :(得分:3)

这对你有用:

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

这是sed命令。

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

脚本很简单;它包含一个“地址”部分,用于选择标题和下一个空行之间的行;以及一个动作部分,用全局逗号替换制表符(所有出现在一行上)并打印如果执行了替换(如此方便,只有行将打印一个标签。)

如果sed不支持\t转义选项卡,则必须放入文字标签(在某些shell中,您必须在命令中键入ctrl-V标签线)。