jq有日期和变量问题

时间:2018-06-12 21:42:28

标签: json linux bash shell jq

以下是在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 :(得分:0)

使用您的示例输入和days = 1524953907,以下查询:

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

的产率:

"xxxxxxxx"

可以使用--arg days $days但是您必须将字符串转换为数字,例如按$days|tonumber