awk を使って出力のアラインメントを揃える
Node.js スクリプトを書く際は、console.table()
とか、columnify
という npm パッケージとかを使うと、出力するデータをイイカンジに整形できる。
今回は Bash スクリプトの中で、イイカンジに整形したくて、やり方を調べた。
- 参考 : awkの出力を揃える | ハックノート
ほとんど上の記事どおり。
hoge-server RUNNING
fugafuga-server STOPPED
foo-server RUNNING
something-server RUNNING
こんな感じの出力結果となるコマンドがあったとする。RUNNING
や STOPPED
といった表記部分で、アラインメントを揃えたい。
そんなときはこう書く。
$ cat result.txt | awk '{ printf "%-20s %s\n", $1, $2 }'
hoge-server RUNNING
fugafuga-server STOPPED
foo-server RUNNING
something-server RUNNING
するとこうなる。
%-20s
部分で、1カラム目を20文字分に調整している。
もし、1カラム目のテキストの長さよりも短い数値を指定した場合はどうなるか、というと、長い部分はちぎられず、アラインメントが揃わないだけ、という動きになる。
$ cat result.txt | awk '{ printf "%-15s %s\n", $1, $2 }'
hoge-server RUNNING
fugafuga-server STOPPED
foo-server RUNNING
something-server RUNNING
コレは15文字分指定したときの結果。something-server
の行は桁数が足りないためにアラインメントが揃っていない。
内容物に合わせて桁数を指定せずにうまいことやってくれる方法はないかなーと思って探したのだが、パッとは見つからなかった。まぁいいや。w