Использование C математических функций с более чем одним аргументом в JQ - PullRequest
0 голосов
/ 23 апреля 2020

Как использовать C математические функции в JQ, которые принимают более одного аргумента? В руководстве нет примеров. Все, что он говорит:

C математические функции, которые принимают один входной аргумент (например, sin()), доступны как функции с нулевым аргументом jq. C математические функции, которые принимают два входных аргумента (например, pow()), доступны как jq-функции с двумя аргументами, которые игнорируют . C математические функции, которые принимают три входных аргумента, доступны как jq-функции с тремя аргументами, которые игнорируют .

Я выяснил, как использовать функции с одним входным аргументом, которые реализованы в виде функций jq с нулевым аргументом:

> echo '{"a": 10.12}' | jq '.a | floor' 
10

Как использовать что-то вроде pow?

Что в руководстве означает «функции jq, которые игнорируют .»? Они игнорируют то, что передается, в том смысле, что они не принимают это в качестве аргумента, в отличие от случая с одним входным аргументом, когда аргумент берется только из канала?

1 Ответ

2 голосов
/ 23 апреля 2020

Это просто, просто разделить аргументы функции на ;:

> echo '{"a": 10.12}' | jq '. | pow(.a;.a)' 
20051775181.748566

Что касается значения jq функций, которые игнорируют .: похоже, что в случае одиночного Функции входного аргумента, такие как floor, на самом деле происходит то, что используется аргумент по умолчанию ., поэтому нет необходимости упоминать какой-либо аргумент.

В случае 2 или более входных аргументов, это, конечно, больше не работает, поэтому аргумент по умолчанию не применяется, и оба аргумента должны быть явно переданы.

...