awk を使って出力のアラインメントを揃える

Node.js スクリプトを書く際は、console.table() とか、columnify という npm パッケージとかを使うと、出力するデータをイイカンジに整形できる。

今回は Bash スクリプトの中で、イイカンジに整形したくて、やり方を調べた。

ほとんど上の記事どおり。

hoge-server RUNNING
fugafuga-server STOPPED
foo-server RUNNING
something-server RUNNING

こんな感じの出力結果となるコマンドがあったとする。RUNNINGSTOPPED といった表記部分で、アラインメントを揃えたい。

そんなときはこう書く。

$ 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