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여기서 약간 분리되어 천 자리를 쉼표로 구분하여 값의 정수 부분 형식을 지정합니다(주어진 로캘에서). 또한 값 앞에 파운드 기호(£)를 추가하고 값이 소수점 이하 두 자리까지 보고되도록 합니다.

출력 예:

£1,262.08

관련 정보