columnコマンドが手軽に便利だった。
ちょっとperlでゴリゴリっと処理して画面に出力して、| tee でログファイルに書くっていうのちょくちょく使うんだけど、実は画面出力を見やすくするために、printするところで地道に整形(のようなこと)をしている。
でもそれって前読んだUNIXという考え方的には良くないなと思った。
人間にとっての見た目よりも、単純な形式で出力するだけのスクリプトにしておいて、人間にとっての見た目は
$ ./script.pl | tee hoge.log | column -t
ってするのがベストなんじゃないかと思った。
以下、覚え書き
$ cat hoge.txt hoge1 hoge2 hoge3 hoge4 hoge5 hoge6 hoge7 hoge8 hoge9 hoge10 hoge11
こんな場合は
$ cat hoge.txt | column -c 30 hoge1 hoge5 hoge9 hoge2 hoge6 hoge10 hoge3 hoge7 hoge11 hoge4 hoge8
-c で横幅を指定できる。
並びが縦に順番になってるのを、横に順番にしたい場合は -x をつけてこう。
$ cat hoge.txt | column -x -c 30 hoge1 hoge2 hoge3 hoge4 hoge5 hoge6 hoge7 hoge8 hoge9 hoge10 hoge11
それより便利なのがこういう場合
$ cat foo.txt domain_name, ipaddress, comment, comment2 domain1, xxx.xxx.xxx.xxx, aaa, ii'ii domain2, yyy.yyy.yyy.yyy, hogehoge,fooooooooooo hoge.domain.com, zzz.zzz.zzz.zzz, 0, 1
-s で区切り文字を指定
-t でカラム数をいい感じにしてくれる
$cat foo.txt | column -t -s , domain_name ipaddress comment comment2 domain1 xxx.xxx.xxx.xxx aaa ii'ii domain2 yyy.yyy.yyy.yyy hogehoge fooooooooooo hoge.domain.com zzz.zzz.zzz.zzz 0 1
余計なスペースがあって微妙なのでこう
cat foo.txt |column -t -s ,' ' domain_name ipaddress comment comment2 domain1 xxx.xxx.xxx.xxx aaa ii'ii domain2 yyy.yyy.yyy.yyy hogehoge fooooooooooo hoge.domain.com zzz.zzz.zzz.zzz 0 1
-s の指定でいい感じにできなさそうだったら前段でsedとかで区切りをいい感じに置換しておくとよさそう。