column/pr/fmt - 整形コマンド 3 兄弟

column/pr/fmt - 整形コマンド 3 兄弟

この 3 コマンドを一言で

column は列を揃える、pr はページを割り付ける、fmt は段落を折り返す——どれも「テキストを人間が読みやすい形に整える」コマンドだ。grep や awk でデータを絞り込んだ後、最後の仕上げに使うことが多い。

結論:使い分けの型

  • スペース / タブ区切りデータを表形式にcolumn -t
  • 長いリストを複数段組で表示pr -N -t
  • 長い行を指定幅で折り返すfmt -w 72

column - なぜ列が揃わないのか?

スペースやタブ区切りのデータをそのまま cat すると列がずれる。column -t は各フィールドの最大幅を計算し、スペースで埋めて整列させる。

基本:スペース区切りを表形式に

echo -e "name age city\nAlice 30 Tokyo\nBob 25 Osaka" | column -t
name   age  city
Alice  30   Tokyo
Bob    25   Osaka

CSV / TSV の整形

-s でセパレータを指定する。

head -5 /etc/passwd | column -t -s:
root    x  0  0  root    /root        /bin/bash
daemon  x  1  1  daemon  /usr/sbin    /usr/sbin/nologin
bin     x  2  2  bin     /bin         /usr/sbin/nologin
sys     x  3  3  sys     /dev         /usr/sbin/nologin
sync    x  4  65534  sync  /bin       /bin/sync

column -t -s の組み合わせは Linux(util-linux 版)専用。macOS(BSD 版)では -s の動作が異なるか未サポートの場合がある。本記事は Linux を前提とする。

複数カラムに並べる

-c でページ幅(文字数)を指定し、複数段組で表示する。

ls /etc | column -c 80
adduser.conf   dhcp           group          magic          protocols
alternatives   environment    hostname       modprobe.d     resolv.conf
apt            fstab          lsb-release    os-release     rsyslog.conf
...

pr - なぜリストが読みにくいのか?

ls の出力を縦一列で眺めると、件数が多い場合に画面が縦長になりすぎる。pr は複数段組にして横に並べることで、一画面に収まる量を増やす。もともとはプリンター用のページ割り付けコマンドだが、端末での段組表示としても有用だ。

複数段組

-N で段数を指定する。

ls /usr/bin | pr -3 -t
[                addpart          apt-add-repository
aa-enabled       addr2line        apt-cache
aa-exec          appstreamcli     apt-cdrom
...
  • -3:3 段組
  • -t:ヘッダとフッタを省略(ファイル名・日付・ページ番号を出力しない)

-t を省略するとファイル名・日付・ページ番号のヘッダが付く。端末で使うときはほぼ必ず -t を付けると覚えておくと楽。

2 ファイルを横に並べて比較

-m で複数ファイルをマージして横並びに表示できる。

pr -m -t file1.txt file2.txt

diff のようにマーカーは付かないが、2 つのテキストを目視で比較するときに手軽。

ページ幅・行数の指定

pr -3 -t -w 120 -l 60 large_list.txt
  • -w 120:ページ幅 120 文字
  • -l 60:ページあたり 60 行

fmt - なぜ行が長くなりすぎるのか?

コピー&ペーストや外部ファイルからのテキストは、行末が統一されていないことがある。fmt は段落を認識し、指定した文字数で折り返し直す。

基本:折り返し幅を指定して整形

cat long_text.txt | fmt -w 72

デフォルトは 75 文字前後(実装依存)。-w で明示するのが確実。

段落を維持しながら折り返す

連続する空行が段落区切りとして扱われ、段落単位で折り返す。

cat README.txt | fmt -w 80
This is the first paragraph of the document. It explains what the
program does and how to use it effectively.

This is the second paragraph. It provides additional details about
the configuration options available.

fmt段落内のテキストを結合して再折り返す。改行を無視して一段落を一つの塊として扱うため、手動で入れた改行は消える。「改行位置だけ変えたい」のか「段落ごと再整形したい」のかを意識すること。コードブロックや箇条書きを含むファイルには使わないほうが安全。

-u オプション(不均一モード)

-u を付けると、複数スペースを単一スペースに圧縮する。コピー時に混入した余分なスペースを取り除くのに便利。

echo "This  has   extra   spaces" | fmt -u
This has extra spaces

3 コマンドの使い分け

用途 コマンド
スペース/タブ区切りデータを表形式に column -t
CSV/TSV を整列して確認 column -t -s,
ファイル名一覧を複数段組で表示 ls | column -c 80
長いリストを 2〜3 段組に並べる pr -N -t
2 つのテキストを横並びで比較 pr -m -t
長い行を折り返す(文書整形) fmt -w 72
余分なスペースを圧縮して整形 fmt -u

パイプでつなぐパターン

これらのコマンドはパイプの末尾で「出力を読みやすくする」役割を果たす。

# CSV の特定列を切り出して表形式で確認
cut -d, -f1,3,5 data.csv | column -t -s,

# 長いファイル一覧を 3 段組で表示
find /etc -maxdepth 1 -name "*.conf" | pr -3 -t

# コミットログを指定幅で折り返して確認
git log --oneline -20 | fmt -w 72

次に読む