从多个文件中捕获参数和值

从多个文件中捕获参数和值

/var/place我们的文件夹下有以下 100-1000 个文件

-rw-r--r-- 1 root root   261 Dec 24 22:52 total_machines-10.json
-rw-r--r-- 1 root root   261 Dec 24 22:52 total_machines-11.json
-rw-r--r-- 1 root root   261 Dec 24 22:52 total_machines-12.json
-rw-r--r-- 1 root root   261 Dec 24 22:52 total_machines-13.json
-rw-r--r-- 1 root root   261 Dec 24 22:52 total_machines-14.json
-rw-r--r-- 1 root root   261 Dec 24 22:52 total_machines-15.json
-rw-r--r-- 1 root root   261 Dec 24 22:52 total_machines-16.json
-rw-r--r-- 1 root root   261 Dec 24 22:52 total_machines-17.json
-rw-r--r-- 1 root root   261 Dec 24 22:52 total_machines-18.json
-rw-r--r-- 1 root root   261 Dec 24 22:52 total_machines-19.json

。 。

每个文件 ( total_machines_rhel-xx.json) 看起来像这样(而主题值可能是 diff )

{
  "version": 1,
  "partitions": [
    {
      "topic": "total_machines_rhel",
      "partition": 10,
      "replicas": [
        1001,
        1003,
        1004
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    }
  ]
}

如何打印主题价值所有这些文件的名称

预期成绩

total_machines-10.json topic=total_machines_rhel
total_machines-11.json topic=total_machines_fedora
total_machines-12.json topic=total_machines_aix
.
.
.

答案1

jq1.5+版本

jq -r '.partitions[] | "\(input_filename) topic=\(.topic)"' total_machines-*.json

使用 Perl 的 JSON 模块:

perl -MJSON -0777 -nE '
  $h = decode_json($_); say "$ARGV topic=$h->{partitions}[0]{topic}"
' total_machines-*.json

磨坊主,使用由当前文件名索引的流外数组。请注意,Miller 目前将 JSON 数组展平为整数键控映射,但由于您的文件每个数组中只有一个元素,因此在本例中这并不是一个严重的限制 - 它实际上并不比依赖perl 版本中partitions元素中的数据更糟糕[0]

mlr --ijson --onidx put -S -q '
  @value[FILENAME] = "topic=".${partitions:0:topic}; end {emit @value, "a"}
' total_machines-*.json

相关内容