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

おすすめ記事