小编Ini*_*ian的帖子

JQ - 如何通过jq插入数组对象的中间

您能提示一下如何通过 jq 在数组对象中间插入新元素吗?

1.json 文件:-

[ {
    "name": "Dependencies",
    "asyncInstallation": false,
    "failOnError": true,
    "yamls": [
      "dependency.yaml",
          ]
  },
  {
    "name": "Management Configuration",
    "asyncInstallation": false,
    "failOnError": true,
    "yamls": [
      "mgmt-job.yaml"
    ]
  },
  {
    "name": "Data Configuration",
    "asyncInstallation": false,
    "failOnError": true,
    "yamls": [
      "data-job.yaml"
    ]
  }, 
  {
    "name": "Tools",
    "asyncInstallation": true,
    "failOnError": false,
    "yamls": [
      "tools-job.yaml"
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

我想在管理配置后插入以下文本。

 {
    "name": "NEW Configuration",
    "asyncInstallation": false,
    "failOnError": true,
    "yamls": [
      "newfile.yaml"
    ]
  }, 
Run Code Online (Sandbox Code Playgroud)

您能否建议我们如何使用 jq 或 sed 来做?

谢谢萨拉瓦南

json sed jq

1
推荐指数
1
解决办法
704
查看次数

如何提取jq中特定子字符串之后的所有文本

我有这个JSON:

{"item":2, "url":"domain/house/23/bedroom"}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用jq获取此新的JSON:

{"item":2, "number":"23", "room":"bedroom"}
Run Code Online (Sandbox Code Playgroud)

可以在jq中这样做吗?第一步,我尝试使用捕获功能来捕获“ / house /”之后的子字符串,但是它不起作用:

cat myjson.json | jq -c '{item:.item,substring:(.url | capture("/house/.*").substring)}'
Run Code Online (Sandbox Code Playgroud)

有没有办法提取两个值并将它们放在两个不同的字段中?

json jq

1
推荐指数
1
解决办法
71
查看次数

如果下一行与 sed 匹配模式,如何删除下一行?

如果下一行与模式匹配,我有删除下一行的问题。例如 :

define service{
host_name               A
notification_period     F
}


define service{
host_name               A
notification_period     metrologie
notification_period     F
}
Run Code Online (Sandbox Code Playgroud)

我检查模式计量。如果下一行包含notification_period,我想删除行notification_period F。

我尝试使用命令 sed '/metrologie/{h;d;};/notification_period/{x;!d;}' $file

但它将字符串转换为:

define service{
host_name               A

}


define service{
host_name               A
notification_period     metrologie
}
Run Code Online (Sandbox Code Playgroud)

我想要这个输出:

define service{
host_name               A
notification_period     F
}


define service{
host_name               A
notification_period     metrologie
}
Run Code Online (Sandbox Code Playgroud)

sed

1
推荐指数
1
解决办法
98
查看次数

使用 jq 解析和映射 2 个数组

我正在使用类似于以下的 JSON 文件:

{   "Response" : {
    "TimeUnit" : [ 1576126800000 ],
    "metaData" : {
      "errors" : [ ],
      "notices" : [ "query served by:1"]
    },
    "stats" : {
      "data" : [ {
        "identifier" : {
          "names" : [ "apiproxy", "response_status_code", "target_response_code", "target_ip" ],
          "values" : [ "IO", "502", "502", "7.1.143.6" ]
        },
        "metric" : [ {
          "env" : "dev",
          "name" : "sum(message_count)",
          "values" : [ 0.0]
        } ]
      } ]
    }   } }
Run Code Online (Sandbox Code Playgroud)

我的目标是显示标识符和值的映射,例如:

apiproxy=IO
response_status_code=502
target_response_code=502 
target_ip=7.1.143.6
Run Code Online (Sandbox Code Playgroud)

我已经能够解析名称和值 …

json jq

1
推荐指数
1
解决办法
121
查看次数

使用 awk 打印多列但用分号连接

我使用 awk 来过滤上一个命令 (docker image ls) 返回的输出,该命令是制表符分隔的列。

我想打印前两列,中间有一个 : 。

我尝试过的:

docker image ls | awk '{ print $1\:$2}'

但无论我如何尝试打印 $1 和 $2 我仍然得到

awk: syntax error at source line 1
 context is
    { print $1 >>>  \ <<< \ $2}
awk: illegal statement at source line 1
Run Code Online (Sandbox Code Playgroud)

如何在输出中使用 : ?

谢谢!

awk

1
推荐指数
1
解决办法
2174
查看次数

我如何正确使用 awk 命令

我是首发。我有一个下面的文件,其中有 4 列;用管道标志隔开。

test.unl
XCS|10|20|20200505|
AWX|20|10|20200606|
WSX|20|10|20200517|
RFV|20|10|20200520|
TGB|10|20|20200609|
Run Code Online (Sandbox Code Playgroud)

我需要写一个命令,如果第 2 列是 10,第 3 列是 20 然后从最后一列减去当前日期,如果日期之间的差异大于 30,则在文件中打印整行。

我正在运行下面的命令,它给了我错误。

more testfile.unl | awk -F '|' '{if(($2==10 && $3==20) && (((date -d "now" +%s)-(date -d "print$4" +%s)/86400))>>30) print$0}' >> File2.unl
Run Code Online (Sandbox Code Playgroud)

以下是我在运行命令时收到的错误:

awk: {if(($2==10 && $3==20) && ((date -d "print$4" +%s)-(date -d "now" +%s)/86400)>>30) print$0}
awk:                                                ^ syntax error
awk: {if(($2==10 && $3==20) && ((date -d "print$4" +%s)-(date -d "now" +%s)/86400)>>30) print$0}
awk:                                                   ^ syntax error
awk: {if(($2==10 && $3==20) && ((date …
Run Code Online (Sandbox Code Playgroud)

awk

1
推荐指数
1
解决办法
101
查看次数

如何生成参数以在bash中从数组中查找命令?

我想查找几个文件名,有时在我的输入中指定通配符。下面是我所拥有的简化。假设v数组将从文件或其他任何东西生成

#!/bin/bash
from_date=2020-05-17
to_date=2020-06-17
v=('-name "*a*"' '-o' '-name "*b*"')
find . "${v[@]}" -newermt "$from_date" ! -newermt "$to_date"
Run Code Online (Sandbox Code Playgroud)

这会产生错误: find: unknown predicate `-name "*a*"'

有什么办法可以让它发挥作用吗?

bash

1
推荐指数
1
解决办法
40
查看次数

SED - 反向匹配模式

我有以下任务:

匹配所有以数字结尾的行,然后反转这些数字

例子:

romarana:qwerty12543
asdewfpwk:asdqwe312
asdj:asbd
asdewfpwk:strwtwe129
ooasodo:asbdjahj
Run Code Online (Sandbox Code Playgroud)

应该:

romarana:qwerty34521
asdj:asbd
asdewfpwk:asdqwe213
asdewfpwk:strwtwe921
ooasodo:asbdjahj
Run Code Online (Sandbox Code Playgroud)

我试过的:

romarana:qwerty12543
asdewfpwk:asdqwe312
asdj:asbd
asdewfpwk:strwtwe129
ooasodo:asbdjahj
Run Code Online (Sandbox Code Playgroud)

注意:您现在可以忽略不以数字结尾的行。

注意:您可以使用 awk、grep 或任何其他工具

regex awk grep sed

1
推荐指数
1
解决办法
479
查看次数

Jq 使用包含多个匹配条件

我有一个包含多个对象 ID 的 json 文件,我需要一个根据命名约定排除不同 ID 的查询。这些本质上是“或”。我以为我已经有了这个查询,但它们仍然出现在输出中。

如果我单独与它们一起运行查询,我可以让它工作,但我需要添加一个大列表。

作品

cat file.json | jq '.interface[] | select(.description | contains ("VLL") | not )'
Run Code Online (Sandbox Code Playgroud)

不工作

cat file.json | jq '.interface[] | select(.description | contains ("VLL"|"2002089"|"otherstuff" ) | not )'
Run Code Online (Sandbox Code Playgroud)

我尝试了几种使用逗号和引用的不同方法,但没有成功。

我离得还远吗?

我还计划在 bash 脚本中运行它,如果有帮助的话(可能会变得更糟)

谢谢

jq

1
推荐指数
1
解决办法
5301
查看次数

在 Bash 中检查 docker 实例

拥有 docker ps -a

我想匹配NAMES VERSIONSTATUS

docker ps -a --format "{{.Image}}\t{{.Status}}" | awk -F$"\t" '{printf "%s|%s\n", $1, $2}'
Run Code Online (Sandbox Code Playgroud)

输出:

registry.com/project/glass/glass_front:2.2.15.4|Up 6 days
registry.com/project/glass/glass_proxy:2.2.15.4|Up 6 days
registry.com/project/glass/glass_modeles_front:2.1.5.2|Up 6 days
Run Code Online (Sandbox Code Playgroud)

我怎样才能修改我的命令来做到这一点:

glass_front | 2.2.15.4 | Up 6 days
glass_proxy | 2.2.15.4 | Up 6 days
glass_modeles_front| 2.1.5.2 | Up 6 days
Run Code Online (Sandbox Code Playgroud)

awk docker

1
推荐指数
1
解决办法
64
查看次数

标签 统计

awk ×4

jq ×4

json ×3

sed ×3

bash ×1

docker ×1

grep ×1

regex ×1