Объяснение необходимо для примера truncate_stream в руководстве по jq - PullRequest
0 голосов
/ 30 марта 2020

Я изучаю руководство jq и заблокирован в примерах truncate_stream следующим образом:

$ echo '1' | jq -c '[ 1 |truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]])]'
[[[0],2],[[0]]]

Может кто-нибудь объяснить пример подробно?

Благодарим Вас за интерес к основному c вопросу.

Приветствия.

1 Ответ

2 голосов
/ 30 марта 2020

Во-первых, руководство немного вводит в заблуждение, поскольку показанное значение ввода («Вход 1») не имеет значения. Это видно, например, из того факта, что следующий вызов создает тот же массив:

$ jq -n -c '[ 1 |truncate_stream([[0],1],[[1,0],2],[[1,0]],[[1]])]'
[[[0],2],[[0]]]

Теперь, чтобы понять, как мы получаем из того, что я назову входным потоком:

[[0],1], [[1,0],2], [[1,0]], [[1]]

в выходной поток:

[[0],2], [[0]]]

полезно помнить, что каждый массив во входном потоке имеет либо форму

[path, value]

, либо форму

[path]

Эффект N | truncate_stream(STREAM), где N - неотрицательное целое число, заключается в удалении первых N элементов каждого path при том понимании, что любой элемент, путь которого == [] должен быть удален.

Таким образом, удаление первого элемента с каждого пути дает:

[[],1],  [[0],2], [[0]], [[]]

, и это становится:

[[0],2], [[0]]

QED

...