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
에 전달합니다 . 이 함수는 배열의 길이를 반환합니다.paths
length
쉘 변수에서 이 숫자를 얻으려면 간단한 명령 대체를 사용하십시오.
number_of_paths=$( yq '.paths|length' file.yml )
항목 수의 합계를 원하는 경우 ( 최상위 배열에 있는 것보다 더 많을 tags
수 있음 ):paths
yq '[ .paths[].post.tags | length ] | add' file.yml
비슷한 방식으로 yq
from을 사용합니다.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
두 파서를 모두 사용할 수 없다면 yq
Perl을 사용할 수도 있습니다.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
대부분 "키"의 의미에 따라 다릅니다.