Yaml 파일의 키 내에서 키 목록을 찾는 셸 스크립트

Yaml 파일의 키 내에서 키 목록을 찾는 셸 스크립트

yaml 파일이 있습니다

info:
  description: Api
  contact:
    name: Api
tags:
  - name: ""
    description: ""
paths:
  /data1/1:
    post:
      tags:
        - "tag1"
  /data2/2:
    post:
      tags:
        - "tag2"
  /data3/3:
    post:
      tags:
        - "tag3"

아래의 키 수를 얻고 싶습니다.paths:열쇠, 즉3여기. 이는 쉘 스크립트에서 필요합니다.

답변1

"아래의 키 수 paths"는 섹션 아래의 최상위 항목 수를 참조한다고 가정합니다 paths.모두키 수, 즉 12). 답변이 끝나면 tags항목 수를 계산하는 방법을 보여줍니다.

yq다음에서 사용https://kislyuk.github.io/yq/:

yq '.paths|length' file.yml

출력은 3샘플 문서에 사용됩니다.

표현식은 배열을 함수 .paths|length에 전달합니다 . 이 함수는 배열의 길이를 반환합니다.pathslength

쉘 변수에서 이 숫자를 얻으려면 간단한 명령 대체를 사용하십시오.

number_of_paths=$( yq '.paths|length' file.yml )

항목 수의 합계를 원하는 경우 ( 최상위 배열에 있는 것보다 더 많을 tags수 있음 ):paths

yq '[ .paths[].post.tags | length ] | add' file.yml

비슷한 방식으로 yqfrom을 사용합니다.https://mikefarah.gitbook.io/yq/:

yq eval '.paths|length' file.yml

또는 변수에 저장하려면

number_of_paths=$( yq eval '.paths|length' file.yml )

tags또는 원하는 배열 길이의 합계인 경우:

yq eval '[ .paths[].post.tags | length ] | .[] as $item ireduce(0; . + $item)' file.yml

답변2

두 파서를 모두 사용할 수 없다면 yqPerl을 사용할 수도 있습니다.YAML::작은기준 치수?

$ perl -MYAML::Tiny -E '
    my $yaml = YAML::Tiny->read("file.yaml"); say scalar keys %{ $yaml->[0]->{"paths"} }
'
3

답변3

이것은 아마도 모든 Unix 시스템의 모든 쉘에서 awk를 사용하여 수행하려는 작업일 것입니다.

$ awk '!/^ /{f=/^paths:/} f && /^  \//{cnt++} END{print cnt+0}' file
3

대부분 "키"의 의미에 따라 다릅니다.

관련 정보