
次のコンテンツを含む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