首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JQ到分析CSV -如何跳过头

JQ到分析CSV -如何跳过头
EN

Stack Overflow用户
提问于 2018-09-24 18:13:50
回答 1查看 326关注 0票数 1

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

CSV的内容:

代码语言:javascript
复制
"1. ID","2. Height","3. Gender","4. Age"
"<1111111111>","5ft. 10.0in.","M"," 15.0"
"<2222222222>","6ft. 0in.","M"," 22.0"

CLI命令的版本1:

代码语言:javascript
复制
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版:

代码语言:javascript
复制
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版输出:

代码语言:javascript
复制
{"phone_number":"1. ID","opt_in":"yes"}
{"phone_number":"1111111111","opt_in":"yes"}
{"phone_number":"2222222222","opt_in":"yes"}

我的理解是,.1:告诉JQ只解析行(用新行分隔)到第一行,但是第1行将指定引用(能够引用phone_number)。

那么,为什么第1版没有输出任何内容呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-24 18:39:34

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

跳过标题行的另一种方法是在不使用inputs命令行选项的情况下使用-n,如下所示。使用inputs也比使用-s命令行选项高效得多。

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

鲁棒性

使用jq解析CSV文件充满了潜在的困难。一般来说,最好使用"csv2tsv“工具将CSV转换为TSV,jq可以轻松处理。

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

https://stackoverflow.com/questions/52485114

复制
相关文章

相似问题

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