Shell-Script
用於在 Yaml 文件中的鍵中查找鍵列表的 Shell 腳本
我有一個 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"
我想得到key下的**
paths:
key的數量,就是3
**here。在 shell 腳本中需要這個。
假設“下的鍵數
paths
”是指該部分下的頂級條目數paths
(而不是鍵的總數,即 12)。在答案的最後,我展示瞭如何計算tags
條目數。
yq
從https://kislyuk.github.io/yq/使用:yq '.paths|length' file.yml
輸出將
3
用於您的範例文件。表達式
.paths|length
將paths
數組傳遞給length
函式。該函式返回數組的長度。要在 shell 變數中獲取此數字,請使用簡單的命令替換:
number_of_paths=$( yq '.paths|length' file.yml )
如果您想要條目數的總和
tags
(可能比頂級paths
數組中的條目多得多):yq '[ .paths[].post.tags | length ] | add' file.yml
以類似的方式,使用
yq
來自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
如果您不能使用任何一個
yq
解析器,也許您可以使用 perl 的YAML::Tiny模組?$ perl -MYAML::Tiny -E ' my $yaml = YAML::Tiny->read("file.yaml"); say scalar keys %{ $yaml->[0]->{"paths"} } ' 3