数字にコンマの追加 (瞬間芸)

2020/AUG/29

更新履歴
日付 変更内容
2020/AUG/27 新規作成
2020/AUG/28 バージョン2 追加
2020/AUG/29 バージョン2 少し修正

目次


アイデア

単なる思いつきです。

ls -l コマンドで、バイト数の数字が辛いです。

-rw-rw-r-- 1 kondoh kondoh 1649590272 May 25 15:09 ubuntu-16.04.5-desktop-amd64.iso

du -hコマンドは優しいです。

$ du -h ubuntu-16.04.5-desktop-amd64.iso
1.6G ubuntu-16.04.5-desktop-amd64.iso

連続する数字を','で区切るフィルターを作ります。

追加した','の数だけズレるので、直前に連続するスペースがあると、できるだけ揃えるように削除します。


ソースコード

'-h' オプションは human からきてるらしいので、

hu.py

という名前にしてみました。

$ cat hu.py
#!/usr/bin/env python

import sys

import empty

def add_delim(s):
	s = s[ :: -1 ]
	d = ''
	while len( s ) > 3:
		d += s[ :3 ] + ','
		s = s [ 3: ]
	d += s
	return d[ :: -1 ]

def cnv(s):
	e = empty.new( s='', buf='' )

	def cut_spc(n):
		for i in range( n ):
			if e.s[ -2 : ] == '  ':
				e.s = e.s[ : -1 ]

	def conn():
		if e.buf:
			buf = add_delim( e.buf )
			cut_spc( buf.count( ',' ) )
			e.s += buf
			e.buf = ''

	for c in s:
		if c.isdigit():
			e.buf += c
		else:
			conn()
			e.s += c
	conn()
	return e.s

if __name__ == "__main__":
	s = sys.stdin.read()
	d = cnv( s )
	sys.stdout.write( d )
# EOF

使用例

python2 の環境でしか試せてませんが...

$ ls -l
total 1634884
-rwxr-xr-x 1 kondoh root          611 Aug 26 22:32 hu.py
-rw-rw-rw- 1 kondoh root     21100932 Aug  7  2015 jrt2.raw
-rw-rw-r-- 1 kondoh root      2870542 Oct  5  2015 ptmsk-14.mp3
-rw-rw-r-- 1 kondoh kondoh 1649590272 May 25 15:09 ubuntu-16.04.5-desktop-amd64.iso

の表示が

$ ls -l | ./hu.py
total 1,634,884
-rwxr-xr-x 1 kondoh root          611 Aug 26 22:32 hu.py
-rw-rw-rw- 1 kondoh root   21,100,932 Aug  7 2,015 jrt2.raw
-rw-rw-r-- 1 kondoh root    2,870,542 Oct  5 2,015 ptmsk-14.mp3
-rw-rw-r-- 1 kondoh kondoh 1,649,590,272 May 25 15:09 ubuntu-16.04.5-desktop-amd64.iso

こんな感じになります。


インストール

kon_pageのpythonモジュールのインストール

に hu を追加しました。

インストールして、さらに

$ alias hu='python -m hu'

を設定すれば

xxx | hu

でオッケーです。

$ ls -l kon_ut/*.py | head
-rw-r--r--  1 kondoh  staff  2953  5 24 13:07 kon_ut/arg.py
-rwxr-xr-x  1 kondoh  staff   513  4 26 11:13 kon_ut/arg_sample-old.py
-rwxr-xr-x  1 kondoh  staff   674  5 24 12:41 kon_ut/arg_sample.py
-rwxr-xr-x  1 kondoh  staff   219  5 24 12:46 kon_ut/arg_sample2.py
-rw-r--r--  1 kondoh  staff  1930  7 12 17:18 kon_ut/base.py
-rwxr-xr-x  1 kondoh  staff  7724  2  1  2020 kon_ut/chat_conn.py
-rwxr-xr-x  1 kondoh  staff  3312  5  2 17:58 kon_ut/cmd_ut.py
-rwxr-xr-x  1 kondoh  staff  1180  6 20 14:24 kon_ut/cmds_out.py
-rwxr-xr-x  1 kondoh  staff  1333  6  9 04:57 kon_ut/dbg.py
-rw-r--r--  1 kondoh  staff   470  3 19 16:15 kon_ut/delim_nl_to_indent.py

のところが

$ ls -l kon_ut/*.py | head | hu
-rw-r--r--  1 kondoh  staff 2,953  5 24 13:07 kon_ut/arg.py
-rwxr-xr-x  1 kondoh  staff   513  4 26 11:13 kon_ut/arg_sample-old.py
-rwxr-xr-x  1 kondoh  staff   674  5 24 12:41 kon_ut/arg_sample.py
-rwxr-xr-x  1 kondoh  staff   219  5 24 12:46 kon_ut/arg_sample2.py
-rw-r--r--  1 kondoh  staff 1,930  7 12 17:18 kon_ut/base.py
-rwxr-xr-x  1 kondoh  staff 7,724  2  1 2,020 kon_ut/chat_conn.py
-rwxr-xr-x  1 kondoh  staff 3,312  5  2 17:58 kon_ut/cmd_ut.py
-rwxr-xr-x  1 kondoh  staff 1,180  6 20 14:24 kon_ut/cmds_out.py
-rwxr-xr-x  1 kondoh  staff 1,333  6  9 04:57 kon_ut/dbg.py
-rw-r--r--  1 kondoh  staff   470  3 19 16:15 kon_ut/delim_nl_to_indent.py

このように。


バージョン2

1行単位で処理するように、少しだけ変更しました。

ダウンロード用のスクリプト dl.py 追加しました。

簡易なファイルツリーのバージョン管理ツール(gitの真似事) 2020春 の dl.py からコピーして、名前の箇所だけ修正してます。;-p)

kon_page/inst.sh から 共通の kon_page/dl.py を使うように変更しました。( 2020/AUG/29 )

パッチ

v2.patch

$ cat v2.patch | patch -p1