jq
сам читает первую строку, затем inputs
(получив эту строку в качестве своего входа) прочитает остаток.Как правило, вы хотите использовать параметр -n
, чтобы jq
не мог выполнять какое-либо чтение самостоятельно, позволяя любым фильтрам input
или inputs
выполнять фактическое чтение.
$ 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
.