Как добавить аргументы в функцию JQ? - PullRequest
0 голосов
/ 27 октября 2019
def gather($ary):
  INDEX(.[]; .column) as $dict
  | $ary
  | map( $dict[.] | .value );

.[] | gather(["h1", "h2", "h3"])

Учитывая приведенный выше файл jq, я получил следующий вывод. Я бы хотел сделать дополнительный аргумент "column" и "value" для gather(), чтобы пользователи могли легко их изменить. Не могли бы вы показать мне, как сделать такой скаляр в качестве аргументов функции? Спасибо.

$ jq -f ./main.jq <<EOF
[
  [
    { "column": "h1", "value": "v1" },
    { "column": "h2", "value": "v2" },
    { "column": "h3", "value": "v3" }
  ],
  [
    { "column": "h1", "value": "v4" },
    { "column": "h2", "value": "v5" },
    { "column": "h3", "value": "v6" }
  ]
]
EOF
[
  "v1",
  "v2",
  "v3"
]
[
  "v4",
  "v5",
  "v6"
]

1 Ответ

0 голосов
/ 27 октября 2019

Аргументы функции разделены ;, а не ,;также обратите внимание, что, как говорится в jq руководстве :

Аргументы передаются как фильтры (функции без аргументов), а не как значения ...

Таким образом, вы можете определить:

def gather($ary; column; value):
   ....

и вызвать его как:

def gather(["h1", "h2", "h3"]; .column; .value)

См. Также https://github.com/stedolan/jq/wiki/How-to:-Avoid-Pitfalls#multi-arity-functions-and-commasemi-colon-confusability

...