コマンド出力を整形してテーブル形式で表示したい

スペースやタブで区切られたコマンドの出力結果を、列が揃ったテーブル形式で見やすく表示したい。

例えば以下のようなスペース区切りのデータがある。

Name Age City
Alice 25 Tokyo
Bob 30 Osaka
Charlie 28 Kyoto

このデータの列を揃えて見やすく表示したい。

Name     Age  City
Alice    25   Tokyo
Bob      30   Osaka
Charlie  28   Kyoto

column -t

columnコマンドに-tオプションをつけると、入力データをテーブル形式で整形して出力する。

$ column -t data.txt
Name     Age  City
Alice    25   Tokyo
Bob      30   Osaka
Charlie  28   Kyoto

各列の最大幅に合わせて自動的にスペースが調整され、列が揃う。

区切り文字を指定する

デフォルトではスペースやタブが区切り文字として扱われるが、-sオプションで区切り文字を指定できる。

カンマ区切りのCSVファイルを整形する場合は以下のようにする。

Name,Age,City
Alice,25,Tokyo
Bob,30,Osaka
Charlie,28,Kyoto
$ column -t -s ',' data.csv
Name     Age  City
Alice    25   Tokyo
Bob      30   Osaka
Charlie  28   Kyoto

-s ','オプションでカンマを区切り文字として指定している。

パイプでコマンドの出力を整形する

コマンドの出力結果をパイプでcolumn -tに渡すと、その場で整形できる。

$ echo -e "Name Age City\nAlice 25 Tokyo\nBob 30 Osaka"
Name Age City
Alice 25 Tokyo
Bob 30 Osaka

$ echo -e "Name Age City\nAlice 25 Tokyo\nBob 30 Osaka" | column -t
Name   Age  City
Alice  25   Tokyo
Bob    30   Osaka

mountコマンドの出力を見やすく整形する例。

$ mount | column -t
sysfs       on  /sys                          type  sysfs       (rw,nosuid,nodev,noexec,relatime)
proc        on  /proc                         type  proc        (rw,nosuid,nodev,noexec,relatime)
devtmpfs    on  /dev                          type  devtmpfs    (rw,nosuid,size=4096k,nr_inodes=1024)

環境変数の一覧を整形する例。

$ env | grep -E '^[A-Z_]+=' | sed 's/=/\t/' | column -t -s $'\t'
PATH        /usr/local/bin:/usr/bin:/bin
HOME        /home/user
SHELL       /bin/bash