我正在尝试使用JQ这样处理CSV,但没有列标题:
cat "input.csv"
"12345678901234567890","2019-03-19",12
是否有一种更优雅,更易读的方法来删除第一字段和第二字段的转义引号-以及总体上,在有这种输入的情况下构建对象流?
理想情况下,我希望有一个可重用的脚本,该脚本从任意CSV生成JSON,并提供文件和其中的字段列表作为命令行参数传递。
当前的JQ脚本和输出:
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
的相同脚本的输出会导致使用引号引起来,我想避免这种情况:
{
"ID": "\"12345678901234567890\"",
"date": "\"2019-03-19\"",
"count": 1
}
答案 0 :(得分:1)
您对jq的调用可以简化为:
jq -R '
split(",")
| map(fromjson)
| {ID: .[0], date: .[1], count: .[2] }'
jq -R --argjson header '["ID", "date", "count"]' '
split(",")
| map(fromjson)
| [ $header, . ]
| transpose
| reduce .[] as $kv ({}; .[$kv[0]] =$kv[1]) '
如果要在文件中指定标题,请改用--argfile
命令行选项。