누구든지 awk 명령을 사용하여 "숫자는 세 자리마다 쉼표를 포함합니다. 예를 들어 100000000은 100,000,000이 됩니다"라는 명령문을 실행하는 방법을 알려줄 수 있습니까?
이 출력을 얻기 위해 sed 명령을 사용하는 방법을 알고 있지만 awk를 사용하는 방법을 모릅니다. 저는 초보자입니다. 아침부터 검색을 시작했지만 적절한 답변을 얻지 못했다고 말해주세요. 최고의 튜토리얼을 제안해주세요. 배우다 .
sed 명령은 위의 출력을 얻습니다.
echo "100000000" | sed -E 's/([0-9]{3})/,\1/2g'
답변1
수동 서식 지정 기능을 갖춘 로캘 독립적인 솔루션
이는 설치된 로케일에 관계없이 모든 POSIX 호환 운영 체제에서 작동합니다.
$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| awk '{ len=length($0); res=""; for (i=0;i<=len;i++) { res=substr($0,len-i+1,1) res; if (i > 0 && i < len && i % 3 == 0) { res = "," res } }; print res }'
1
10
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000
printf
en_US 로캘을 사용하는 솔루션입니다.
이 printf
시퀀스는 %'d
현재 로케일에 대해 천 단위 구분 기호를 사용하여 형식화된 10진수를 인쇄합니다.
$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| LC_ALL=en_US.UTF-8 awk '{ printf("%'"'"'d\n", $0) }'
1
10
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000
답변2
gawk 'END {
printf("%-20s %\47 10i \n", "Number of records: ", NR)
printf("%-20s %\47 10.2f \n", "Number of records: ", NR)
}' /var/log/kern.log
Number of records: 2,818
Number of records: 2,818.00 `
답변3
또 다른 해결책은numfmt
(Debian의 일부이며 coreutils
기본적으로 Debian에 포함되어 있습니다)
$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| LC_ALL=en_US.UTF-8 numfmt --padding=12 --grouping
1
10
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000
$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| LC_ALL=en_US.UTF-8 numfmt --grouping
1
10
100
1,000
10,000
100,000
1,000,000
10,000,000
100,000,000
%'f
다음을 사용하여 값의 형식을 직접 지정할 수도 있습니다.--grouping
$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| LC_ALL=en_US.UTF-8 numfmt --format "%'f"
$ printf "1\n10\n100\n1000\n10000\n100000\n1000000\n10000000\n100000000\n" \
| LC_ALL=en_US.UTF-8 numfmt --format "%'12f"