В настоящее время jq не имеет встроенной функции рандомизации, но достаточно просто генерировать случайные числа, которые может использовать jq. Следующее решение использует awk
, но таким образом, что некоторые другие PRNG могут быть легко использованы.
#!/bin/bash
function template {
cat<<EOF
[
{
"name": "Matias",
"age": "33"
}
]
EOF
}
function randoms {
awk -v n=$1 'BEGIN { for(i=0;i<n;i++) {print int(100*rand())} }'
}
randoms 100 | jq -n --argfile template <(template) '
first($template[] | select(.name | test("M.*"))) as $t
| [ $t | .age = inputs]
'
Замечание по производительности
Даже несмотря на то, что вышеупомянутые используют awk и jq вместе, эта комбинация примерно в 10 раз быстрее, чем опубликованное решение jtc
с использованием -eu
:
jq+awk: u+s = 0.012s
jtc with -eu: u+s = 0.192s
Использование jt c в сочетании с awk, как указано выше, однако дает u + s == 0,008 с на той же машине.