代码之家  ›  专栏  ›  技术社区  ›  Mike Purcell

JQ解析CSV-如何跳过标题

  •  1
  • Mike Purcell  · 技术社区  · 7 年前

    我有一个CSV,需要转换成一个简单的新行分隔格式,然后输入到另一个脚本中,但是遇到了一个奇怪的问题。

    CSV内容:

    "1. ID","2. Height","3. Gender","4. Age"
    "<1111111111>","5ft. 10.0in.","M"," 15.0"
    "<2222222222>","6ft. 0in.","M"," 22.0"
    

    CLI命令版本1:

    cat source.csv | sed 's/[\"<>]//g' | ~/projects/dp/vendor/jq/1.5/jq --raw-input --compact-output 'split("\n") | .[1:] | map(split(",")) | map({"phone_number":.[0],"opt_in":"yes"}) | .[]'
    

    版本1输出:无

    CLI命令版本2:

    cat source.csv | sed 's/[\"<>]//g' | ~/projects/dp/vendor/jq/1.5/jq --raw-input --compact-output 'split("\n") | .[0:] | map(split(",")) | map({"phone_number":.[0],"opt_in":"yes"}) | .[]'
    

    版本2输出:

    {"phone_number":"1. ID","opt_in":"yes"}
    {"phone_number":"1111111111","opt_in":"yes"}
    {"phone_number":"2222222222","opt_in":"yes"}
    

    那么为什么版本1没有输出任何东西呢?

    1 回复  |  直到 7 年前
        1
  •  2
  •   peak    7 年前

    版本1缺少 -s 命令行选项。

    inputs 没有 -n 命令行选项,如下所示。使用 输入 -s码

    < source.csv sed 's/[\"<>]//g' |
    jq -cR 'inputs 
          | split(",")
          | {"phone_number":.[0],"opt_in":"yes"}'
    

    稳健性