首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSV输入中的引号字符串变为双转义。

CSV输入中的引号字符串变为双转义。
EN

Stack Overflow用户
提问于 2019-03-19 18:19:30
回答 1查看 228关注 0票数 0

我试图使用JQ来处理没有列标题的CSV:

代码语言:javascript
复制
cat "input.csv"
"12345678901234567890","2019-03-19",12

是否有更优雅和可读的方法来删除第一个和第二个字段的转义引号

理想情况下,我希望有一个可重用的脚本,该脚本从artbitrary构建JSON,给出一个文件和其中作为命令行参数传递的字段列表。

当前的JQ脚本和输出:

代码语言:javascript
复制
cat "input.csv" |
jq \
  --raw-input '
    . |
    split("\n") |
    map( split(",")) |
    .[0] |
    {
      ID: (.[0] | fromjson),
      date: (.[1] | fromjson),
      count: (.[2] | tonumber)
    }'

{
  "ID": "12345678901234567890",
  "date": "2019-03-19",
  "count": 1
}

在没有| fromjson的情况下,相同脚本的输出使用引号,这将导致引号,我想避免:

代码语言:javascript
复制
{
  "ID": "\"12345678901234567890\"",
  "date": "\"2019-03-19\"",
  "count": 1
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-19 20:50:31

可以将对jq的调用简化为:

代码语言:javascript
复制
jq -R '
  split(",")
  | map(fromjson)
  | {ID: .[0], date: .[1], count: .[2] }'

通用解决方案

代码语言:javascript
复制
jq -R --argjson header '["ID", "date", "count"]' '
  split(",")
  | map(fromjson)
  | [ $header, . ]
  | transpose
  | reduce .[] as $kv ({}; .[$kv[0]] =$kv[1]) '

如果要在文件中指定标头,请使用--argfile命令行选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55247622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档