Shell-Script

用於在 Yaml 文件中的鍵中查找鍵列表的 Shell 腳本

  • August 25, 2021

我有一個 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條目數。

yqhttps://kislyuk.github.io/yq/使用:

yq '.paths|length' file.yml

輸出將3用於您的範例文件。

表達式.paths|lengthpaths數組傳遞給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

引用自:https://unix.stackexchange.com/questions/665242