- blogs:
- cles::blog
2013/05/23

シェルスクリプトで数字を3桁ごとのカンマ区切りにする



数値を扱うシェルスクリプトを書いていたのですが、扱う数値の桁が大きくなってくると読みにくかったりします。
これを解消するために3桁ずつのカンマ区切りにできないかなと思って調べてみたところ、あっさり解決する方法を見つけたのでメモ。
具体的な方法は printf を使うだけ。ただし、ロケール依存なのできちんと環境変数を設定しておく必要があります。
それにしても、フォーマットの指定で ' (シングルクォート)が使えるというのは知りませんでした。
$ export LANG=ja_JP.utf-8 ; printf "%'d\n" 1234567890
1,234,567,890
$ export LANG=C ; printf "%'d\n" 1234567890
1234567890
これは簡単なのでいろいろなところに活用できますね。
† C 言語の printf() でも同じことができる
ちなみにこの printf は C 言語の printf() のラッパーみたいなものなので、Cプログラミングでも同じことができます。
10進数変換 (i, d, u, f, F, g, G) において、ロケール情報に指定があれば 1000 単位の区切り文字を出力する。
具体的にはロケールを考慮するようにするために下記のような感じで、setlocale() を呼び出しておく必要があります。
ちなみに "" は環境変数からロケールを設定するという意味です。
locale_test.c
#include <stdio.h>
#include <locale.h>
int main(void){
setlocale(LC_NUMERIC, "");
printf("%'d\n", 123456789);
return 0;
}
これをコンパイル、実行するとこんな感じになります。
普段あまり意識しないで使っていた printf() ですが、ちゃんとロケールに反応するようにはできてたんですね。
$ gcc locate_test.c
$ LANG=C ./a.out
123456789
$ LANG=ja_JP.utf-8 ./a.out
123,456,789
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5819
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(114419)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112942)
3 . 年次の人間ドックへ(112368)
4 . 2023 年分の確定申告完了!(1つめ)(111937)
5 . 三菱鉛筆がラミーを買収(111811)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(112942)
3 . 年次の人間ドックへ(112368)
4 . 2023 年分の確定申告完了!(1つめ)(111937)
5 . 三菱鉛筆がラミーを買収(111811)
cles::blogについて
Referrers