嗨我有这种格式的输入文件。
[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命令并不太了解。有人可以帮助我。
由于
答案 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标签线)。