awkで文字列を綺麗に揃えて出力する方法です。
例として以下のテキストファイル(test.txt)をawkで揃えて出力します。
127.0.0.1 31times 54.67.128.111 4times
awkで出力を揃える場合はprintfを用います。
cat test.txt | awk '{printf "%20s %s\n",$1,$2}'
上記のコマンドはtest.txtの第1フィールドと第2フィールドの間にスペースを一つ入れて出力するものです。 出力結果は以下のようになります。
$ cat test.txt | awk '{printf "%20s %s\n",$1,$2}' 127.0.0.1 31times 54.67.128.111 4times
上記のコマンドをベースに出力を揃えていきます。
cat test.txt | awk '{printf "%20s %s\n",$1,$2}'
第1フィールドに対応する%sを%20sに変更しました。
これにより、第1フィールドが20文字分の文字列として右詰めで出力されます。
$ cat test.txt | awk '{printf "%20s %s\n",$1,$2}' 127.0.0.1 31times 54.67.128.111 4times
左の空白と第1フィールドを合わせると20文字分になっています。
右詰めだと気持ちわるいので左詰めにしてみます。
cat test.txt | awk '{printf "%-20s %s\n",$1,$2}'
今度は%20sを%-20sにしました。これで左詰めになります。
$ cat test.txt | awk '{printf "%-20s %s\n",$1,$2}' 127.0.0.1 31times 54.67.128.111 4times
第1フィールドと中央の空白が合わせて20文字分(元々間にスペースを入れているので正確には21文字分)になっています。
今度は第2フィールドのtimesの位置がばらばらで気持ちわるいので第2フィールドを右詰めで揃えてます。
cat test.txt | awk '{printf "%-20s %7s\n",$1,$2}'
先ほどと同様です。第2フィールドを7文字分として右詰めします。
$ cat test.txt | awk '{printf "%-20s %7s\n",$1,$2}' 127.0.0.1 31times 54.67.128.111 4times
これで綺麗に揃いました。