web-dev-qa-db-ja.com

Awkを使用して3桁ごとの区切り記号で数値をフォーマットする方法

このステートメントでawkコマンドを使用する方法を誰かに教えてもらえますか。「数字には3桁ごとにカンマが含まれます。たとえば、100000000は100,000,000になります。

私はsedコマンドを使用してこの出力を取得する方法を知っていますが、awkの使用方法がわかりません。初心者なので、朝から検索していることを教えてください。これに対する適切な回答が得られなかったため、提案してください学習に最適なチュートリアル。

上記の出力を取得するsedコマンド:

echo "100000000" | sed -E 's/([0-9]{3})/,\1/2g'
7
Error3735

手動でフォーマットする、ロケールに依存しないソリューション

これは、インストールされているロケールに関係なく、すべてのPOSIX互換OSで機能するはずです。

$ 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
12
nwk