sedを使用して数字の代わりにカンマを追加しますか?

sedを使用して数字の代わりにカンマを追加しますか?

イーサリアムの価格を取得し、応答形式を指定する簡単なスクリプトを書いてください。

私が試したことは次のとおりです。

#!/bin/bash

response=$(curl 'https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=GBP')
price=$(echo $response | grep -o -P '(?<=:).*(?=})')
formattedPrice=$(echo "${price%.*}" | sed 's/\([[:digit:]]\{3\}\)\([[:digit:]]\{3\}\)\([[:digit:]]\{3\}\)/\1,\2,\3/g')

echo "£$formattedPrice"

カンマを追加しませんが。

答え1

数値書式を指定する代わりに、sed次を使用することをお勧めしますprintf

$ price=1254.43
$ printf "%'.2f\n" $price
1,254.43

または少数の部分が必要ない場合:

$ printf "%'d\n" ${price%.*}
1,254

答え2

jq返されたJSON文書から数値を抽出するために使用しcurl、対応する出力フィルタがないため、GNUを使用してawkロケールに応じて数値形式を指定します。en_GB.UTF-8jqprintf

curl -s 'https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=GBP' |
jq -r '.GBP' |
LC_ALL=en_GB.UTF-8 gawk '{ printf "£%'\''.2f\n", $1 }'

printf一重引用符で囲まれた文字列のアポストロフィには特別な処理が必要なので、書式文字列は£%'.2fここで少し区切られ、1000桁をカンマで区切って値の整数部分書式を指定します(指定されたロケールで)。また、値の前にポンド記号(£)を追加し、値が小数点以下の2桁まで報告されるようにします。

出力例:

£1,262.08

関連情報