json - 为什么 `inputs` 跳过输入文件的第一行?

标签 json csv jq

每当我向 jq 提供文件并使用 inputs 时命令,我只取回除第一行以外的所有行,我想知道为什么会这样

我目前正在使用 jq 1.6,我正在尝试使用 inputs命令通过抓取文件的第一行作为标题并将每个标题作为下一行中相应值的键来将 TSV(制表符分隔值)转换为 JSON

如果我执行以下

echo -n 'line1'$'\n''line2' | jq -R 'inputs'

结果是
line2

并不是
line1
line2

正如我所期望的

作为一种解决方法,我目前正在为我提供给 jq 的输入添加一个新行,如下所示
echo -n $'\n''line1'$'\n''line2' | jq -R 'inputs'

但我的期望是能够使用 inputs并让它处理第一行

最佳答案

jq本身正在阅读第一行,然后是 inputs (已收到该行作为其输入)将读取其余部分。通常,您希望使用 -n阻止选项 jq从做任何阅读本身,让任何inputinputs过滤器进行实际读数。

$ echo -n $'line1\nline2\n' | jq -nR 'inputs'
"line1"
"line2"

在你的情况下,让 jq阅读标题和 inputs读取其余数据是合理的,但是您必须对标题做一些事情。这可能比它需要的更复杂,但可以完成工作:
$ cat tmp.tsv
foo bar baz
1   2   3
4   5   6
$ jq -R 'split("\t") as $h | [inputs | split("\t") | [{key: $h[0], value: .[0]}, {key: $h[1], value: .[1]}, {key: $h[2], value: .[2]}] | from_entries]' tmp.tsv
[
  {
    "foo": "1",
    "bar": "2",
    "baz": "3"
  },
  {
    "foo": "4",
    "bar": "5",
    "baz": "6"
  }
]
jq读取第一行并将其拆分为数组 h ,然后将该行馈送到过滤器,该过滤器忽略它但使用 inputs读取其余的行,将每一行拆分并使用(重复)$h 的值创建一个字典。 .

关于json - 为什么 `inputs` 跳过输入文件的第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55995980/

相关文章:

php - Curl 将 cookie 设置为 json 中的 header

Python CSV Reader 仅限 JSON 的第一个字符

javascript - 为什么我的变量未定义?

Windows 等效于 Linux JQ 工具命令

json - 使用jq根据键值合并两个json值

json - 如何在PowerShell中将HashTable正确转换为JSON?

PHP 将大型 CSV 文件导入 MySQL 表

Python将csv转换为xlsx

对目录中的所有文件运行 R 代码,并在单独的目录中输出所有文件

json - 使用 PUP/JQ 将 HTML 转换为 JSON 并将数据提取到变量