我有一个格式的输入文件:
(key1=value1,key2=value2,key3=value3)
(key1=value4,key2=value5,key3=value6)
我想将此文件转换为 csv 文件,例如:
key1,key2,key3
value1,value2,value3
value4,value5,value6
我如何在 shell 脚本中执行此操作?
最佳答案
您可以使用这个 awk
处理这个文件:
awk -F'[=(),]' -v OFS=, 'NR==1{for (i=2; i<NF; i+=2) printf "%s%s", $i, (i<NF-2)?OFS:ORS}
{for (i=3; i<=NF; i+=2) printf "%s%s", $i, (i<NF-2)?OFS:ORS}' input
key1,key2,key3
value1,value2,value3
value4,value5,value6
解释:
-
-F'[=(),]'
- 将字段分隔符作为字符类中的字符之一:[=(),]
-
-v OFS=,
- 将输出字段分隔符设为逗号 -
NR==1
- 仅对第一条记录执行此 block -
'NR==1{...}
将通过打印字段 2、4、6 来打印输入文件的所有标题... -
{for (i=3; i<=NF; i+=2) ...}
将通过打印字段 3、5、7 来打印所有单元格...
关于shell - 如何在 unix shell 脚本中将包含 key = value 格式数据的文件转换为 csv 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27123624/