シェルスクリプトで数値を3桁ごとにカンマ区切りで表示する(Number Format)
Contents
はじめに
桁数の多い数値を見やすくするために、3 桁ごとにカンマ区切りで表示することがあります。
昔の現場では「カンマ編集」と言われていました。
また、多くのプログラミング言語に組み込み関数として用意されています。
金額をページ内に表示するとき利用されますね。
ex) 1,234,567
シェルスクリプトで実現する方法について取り上げます。
検証環境
$ uname -moi
x86_64 MacBookPro11,4 Darwin
$ bash -version | head -n 1
GNU bash, バージョン 5.0.11(1)-release (x86_64-apple-darwin18.6.0)
printf
コマンドを使う ( シェルがBash 5系
である場合 )
printf
コマンドを利用すれば OK。
シェルがBash 5系
以上である場合は、組み込みコマンドであるprintf
が利用できます。
数値を出力するためのフォーマットは%d
ですが、%
とd
の間に'
(シングルクォート)を挿入するとカンマ区切りで表示されます。
# 普通にprintfで数値を出力する場合
$ printf "%d\n" 1234567890
1234567890
# カンマ区切りのフォーマッタを使って出力する場合
$ printf "%'d\n" 1234567890
1,234,567,890
sed
コマンドを使う ( シェルがBash 5系
でない場合 )
Bash が利用できなかったり、バージョンが古い場合にはsed
で頑張ってみます。
$ echo 1234567890 | sed -E ':l; s/^([0-9]+)([0-9]{3})/\1,\2/; t l;';
1,234,567,890
簡単に解説すると、以下のような処理をsed
で行っています。
:
コマンドでl
という文字列でラベル付けする(goto 文のような機能)s
コマンドで置換するt
コマンドでl
ラベルまで移動する。- ※ただし
t
コマンドは直前のs
コマンドで置換が行われなかった場合は移動しない
- ※ただし
ひとこと
Bash5 系でしかつかえない便利機能、ちょいちょいありますね。
地味に便利な機能が多い。
ディスカッション
コメント一覧
まだ、コメントがありません