バージョンファイルの抽出にはjqとawkが使用されます。

バージョンファイルの抽出にはjqとawkが使用されます。

次のコンテンツを含むJSONファイルを使用してください。

{"major":a, "minor":b, "hotfix":c}

jq次の出力を生成するために使用したいもの:

a.b.c

jqたとえば、別々のコマンドを使用したが、jq .major必要なものを個別に取得することができましたが、一度に実行すること、特にポイントを追加するのは私にとって困難でした。

ありがとうございます。

答え1

jqには、このような状況に合った結合機能があります。

jq '[.major,.minor,.hotfix] | map (tostring) | join(".")'

map値がすでに文字列の場合は省略できます。

答え2

jqコマンド置換では、コマンドシーケンスを使用してコマンド間のピリオドをハードコーディングする変数を割り当てます。

output="$(jq .major ...)"."$(jq .minor ...)"."$(jq .hotfix ...)"

答え3

jq -j '.major, ".", .minor, ".", .hotfix, "\n"' file

誰かが理解できない場合に備えて、マニュアルページには次のように示されています。

"hello"や42などのリテラルもフィルタです。入力は許可しますが、常に出力と同じリテラルを生成します。

....

、両方のフィルタがコンマで区切られた場合、入力は両方のフィルタに供給され、複数の出力が発生します。まず、左式によって生成されたすべての出力、次に右式によって生成されたすべての出力です。

| map | joinしたがって、これらの単純なケースでは複雑な問題は必要ありません。たぶん、マニュアルページをよりよく設定する必要があるかもしれません。

答え4

jq利用できないと仮定すると、GNUawkソリューションは次のようになります。

awk -F':|,|}' '{print $2"."$4"."$6}' file

関連情報