여러 파일에서 매개변수 및 값 캡처

여러 파일에서 매개변수 및 값 캡처

/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

그리고밀러, 현재 파일 이름으로 색인화된 스트림 외부 배열을 사용합니다.partitionsMiller는 현재 JSON 배열을 정수 키 맵으로 평면화하지만 파일에는 각 배열에 하나의 요소만 있으므로 이 경우 심각한 제한은 아닙니다. 실제로는 Perl 버전에 의존하는 것 보다 나을 것이 없습니다. 중간 요소는 더욱 악화됩니다 [0].

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

관련 정보