Linux

從多個文件中擷取參數和值

  • December 25, 2019

/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.5+jq版本

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,使用由目前文件名索引的流外數組。請注意,Miller 目前將 JSON 數組扁平化為整數鍵映射,但由於您的文件在每個數組中只有一個元素,partitions這在這種情況下並不是一個嚴重的限制 - 這實際上並不比依賴[0]perl 版本中元素中的數據更糟糕.

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

引用自:https://unix.stackexchange.com/questions/558834