JQ解析CSV-如何跳过标题

JQ解析CSV-如何跳过标题,csv,jq,Csv,Jq,我有一个CSV,需要转换成一个简单的新的行分隔格式,然后输入到另一个脚本中,但遇到了一个奇怪的问题 CSV的内容: "1. ID","2. Height","3. Gender","4. Age" "<1111111111>","5ft. 10.0in.","M"," 15.0" "<2222222222>","6ft. 0in.","M"," 22.0" 我的理解是,[1:]告诉JQ只解析第1行之后的行(用新行分隔),但是第1行将指定引用(能够引用电话号码) 那么为什

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

CSV的内容:

"1. ID","2. Height","3. Gender","4. Age"
"<1111111111>","5ft. 10.0in.","M"," 15.0"
"<2222222222>","6ft. 0in.","M"," 22.0"
我的理解是,[1:]告诉JQ只解析第1行之后的行(用新行分隔),但是第1行将指定引用(能够引用电话号码)


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

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

< source.csv sed 's/[\"<>]//g' |
jq -cR 'inputs 
      | split(",")
      | {"phone_number":.[0],"opt_in":"yes"}'
另一种跳过标题行的方法是使用
输入
,而不使用
-n
命令行选项,如下所示。使用
输入
也比使用
-s
命令行选项更有效

< source.csv sed 's/[\"<>]//g' |
jq -cR 'inputs 
      | split(",")
      | {"phone_number":.[0],"opt_in":"yes"}'
健壮性
使用jq解析CSV文件充满了潜在的困难。一般来说,最好使用“csv2tsv”工具将CSV转换为TSV,jq可以轻松处理该文件。

您的修订工作如前所述,谢谢。我同意不使用-s(slurp)标记,尤其是较大的文件,但是它在许多在线教程中很普遍。
输入
包含在2015年8月16日发布的jq 1.5中,因此理想情况下这些教程应该更新。有趣的是,我使用的是1.5版本,但正如你提到的,很多在线教程都使用了我在问题中发布的语法.再次感谢。
{"phone_number":"1. ID","opt_in":"yes"}
{"phone_number":"1111111111","opt_in":"yes"}
{"phone_number":"2222222222","opt_in":"yes"}
< source.csv sed 's/[\"<>]//g' |
jq -cR 'inputs 
      | split(",")
      | {"phone_number":.[0],"opt_in":"yes"}'