JQ с датой и переменной выдачи - PullRequest
0 голосов
/ 13 июня 2018

Нижеследующее работает в bash как скрипт, который в данный момент вызывается вручную.

Последние несколько часов я ломал голову над этим.По жизни я не могу передать переменную в jq, как бы я к ней не поступил.Когда я устанавливаю переменную вручную, не ссылаясь на мою команду jq и выводя ее, это работает.Однако, когда он помещается в мою команду, он не работает.

Я думаю, что это связано с оператором fromdateiso8601 или <, вызывающим проблему.

timestamp.json содержит несколько сотен приведенных ниже в файле.Мне нужно сослаться на каждого и вытащить любого старше 45 дней.Вот что я попробовал.

date -d -45days +%s >> 45days.text
days=$(<45days.text)
echo $days    
cat $_fileformated | jq 'select(.Timestamp | . == null or fromdateiso8601? < "$days" ) .serverrname' >> $filereport
cat $_fileformated | jq -r --arg days "$days" 'select(.Timestamp | . == null or fromdateiso8601? < "$days" ) .serverrname' >> $filereport
cat $_fileformated | jq -r --arg days "$days" 'select(.Timestamp | . == null or fromdateiso8601? < env.days ) .serverrname' >> $filereport
cat $_fileformated | days="$days" jq 'select(.Timestamp | . == null or fromdateiso8601? < 'env.days' ) .serverrname' >> $filereport    
{
    "servername": "xxxxxxxx",
    "Timestamp": "2018-06-12T13:41:08Z"
}

1 Ответ

0 голосов
/ 13 июня 2018

При вводе пробы и днях = 1524953907 следующий запрос:

jq --argjson days $days '
  select(.Timestamp | select(fromdateiso8601 > $days)).servername'

дает:

"xxxxxxxx"

Можно использовать --arg days $days, но тогда вам придется преобразоватьстрока в число, например, $days|tonumber

...