/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
)は次のとおりです(テーマの値は異なる場合があります)。
{
"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
jq
バージョン 1.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
そしてミラー、現在のファイル名でインデックス付けされたストリームの外部配列を使用します。partitions
Millerは現在のJSON配列を整数キーマップに平坦化していますが、ファイルには各配列に1つの要素しかないため、この場合は厳しい制限ではありません。実際にはPerlバージョンに頼るよりも良いことはありません。中間要素はさらに悪化します[0]
。
mlr --ijson --onidx put -S -q '
@value[FILENAME] = "topic=".${partitions:0:topic}; end {emit @value, "a"}
' total_machines-*.json