【发布时间】:2014-11-25 09:58:50
【问题描述】:
我有一个格式的输入文件:
(key1=value1,key2=value2,key3=value3)
(key1=value4,key2=value5,key3=value6)
我想将此文件转换为 csv 文件,例如:
key1,key2,key3
value1,value2,value3
value4,value5,value6
如何在 shell 脚本中做到这一点?
【问题讨论】:
我有一个格式的输入文件:
(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 - 仅对第一条记录执行此块'NR==1{...} 将通过打印字段 2、4、6... 来打印输入文件的所有标题{for (i=3; i<=NF; i+=2) ...} 将通过打印字段 3、5、7... 来打印所有单元格...【讨论】: