【问题标题】:jq with date and variable issue带有日期和变量问题的 jq
【发布时间】:2018-06-12 21:42:27
【问题描述】:

以下内容在 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"
}

【问题讨论】:

  • 请提供一个示例输入(最后四行)和所需的输出。
  • 单引号内的双引号不会被解析。所以'something "$days" something' 不会取代$days

标签: json linux bash shell jq


【解决方案1】:

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

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

产量:

"xxxxxxxx"

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

【讨论】:

  • 你是我的英雄,成功了。我正在阅读 argjson 认为它可能会更好,但我无法弄清楚 double (fromdateiso8601?) 部分。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多