Linux
從多個文件中擷取參數和值
/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