jq選択結果から最初/最後/n番目の結果を取得する

jq選択結果から最初/最後/n番目の結果を取得する

現在のスクリプトの結果を、ここで選択した配列の最後の結果のみを取得できる他のコマンドにパイプする方法を見つけたいと思います。

jq -r --arg name "$1" '.packageAliases | to_entries[] | select(.key | startswith($name))' sfdx-project.json

ファイルは、スクリプトが新しいパッケージのバージョン番号とIDを追加するsfdx-project.jsonネストされたJSONを持つjsonファイルです。packageAliases

{
 "data" : "that",
 "is" : "not",
 "really" : "necessary",
 "packageAliases" : {
  "package" : "0H0fffff",
  "[email protected]" : "04t0xxxxxx"
 }
}

アイデアは、特定のパッケージ名のすべてのパッケージエイリアスを選択し、使用する必要がある最後のエイリアスをそのままにすることです。

select私が得た結果をパイプで接続しようとすると、last次のエラーが発生します。 Cannot index object with number

select() コマンドが配列を返すと思いましたが(中間結果をエコーするときもこの配列を取得します)

last()コマンドを別の場所に置くと、配列にいくつかのnull値しか残りませんが、実際に必要な単一の値はまだ取得されません。

配列から最後の項目を取得するには、コマンドをどのように変更する必要がありますかselect()

ベストアンサー1

jq -r --arg name "$1" 'last(.packageAliases | to_entries[] | select(.key | startswith($name)))

コマンド全体をlast()でラップすると、パイプラインチェーン全体の結果になるため、トリックが実行されます。

おすすめ記事