从Shell中输出CSV文件

3

您好,我有一个输入文件的格式如下:

[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命令并不了解。请问有人可以帮我吗?
谢谢。

1
你能至少使用 AWK 吗? - James Allman
1
内联注释实际上在输入文件中吗? - SiegeX
不,它们不是那里的。我把它们放在这里。 - Ank
2个回答

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

太棒了,谢谢。我会仔细阅读命令并理解它的作用,这样下次我就可以自己做了。再次感谢。 :) - Ank

1

Here's a sed command.

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

这个脚本很简单,它由两部分组成:一个“地址”部分用于选择标题和下一个空行之间的行,以及一个操作部分用于全局替换制表符为逗号(一行上的所有出现),并在执行替换时打印(因此只会打印有制表符的行)。

如果你的sed不支持制表符的\t转义,那么你就需要输入一个字面上的制表符(在某些shell中,你需要在命令行上键入ctrl-V tab)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接