shell - 如何在 unix shell 脚本中将包含 key = value 格式数据的文件转换为 csv 文件?

标签 shell unix csv

我有一个格式的输入文件:

(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/

相关文章:

mysql - 在 bash shell 脚本中解析 MySQL Community Edition 5.7 自动生成的临时 root 密码

shell - 如何解析Shell脚本中的字符串

python - `conda activate` 如何改变*当前* bash 环境?

unix - 为什么 #!/bin/ksh 是 shell 脚本中的第一行

Python3 传递 Ruby 中等效的命令

Bash:使用第 n 行作为命令行的一部分

linux - 使用新数据更新 CSV 行并保存文件

python - 使用 pd.read_csv 时跳过日期不正确的行

regex - shell 正则表达式 : Extract prices

php - 发送 POST 请求 wget