「awkでCSVを処理したはいいが、出力がぐちゃぐちゃで確認しにくい」
こういった場面でサッと使えるのが column コマンドです。
パイプで繋ぐだけで、バラバラな列を整然と揃えてくれる地味ながら強力なツールです。
この記事では、columnコマンドの基本的な使い方から、TSV・CSV・ログ整形への応用、よく詰まるポイントまでを解説します。
RHEL 9.4 / Ubuntu 24.04 LTSで動作確認済みです。
この記事のポイント
・column -t でスペース区切りのテキストをテーブル整形できる
・-s オプションで区切り文字を指定しCSV・TSVにも対応できる
・パイプで繋ぐだけなので他コマンドと自由に組み合わせられる
・util-linux版とBSD版で -s オプションの挙動が異なる点に注意
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
columnコマンドとは?何ができるのか
columnコマンドは、標準入力またはファイルのテキストを列幅を揃えて整形表示するコマンドです。RHEL/CentOS/Ubuntu/Debianいずれでも標準搭載されており、追加インストール不要で使えます。
主な用途は以下のとおりです。
・スペース区切りのログを見やすい表形式に変換する
・TSVやCSVの内容をターミナルで確認するときに整形する
・psやdfなどのコマンド出力をさらに整形して視認性を高める
ファイルを直接書き換えるわけではなく、表示のみを整形するコマンドです。
パイプやリダイレクトで組み合わせて使うことが前提になっています。
基本的な使い方
1. スペース区切りのテキストを整形する(-t オプション)
最も基本的な使い方は、-t(table)オプションを使った整形です。スペースを区切りとみなし、各列の幅を自動調整してくれます。
# テスト用データを用意する $ cat /tmp/servers.txt hostname ip_address status role web-01 192.168.10.11 running web db-01 192.168.10.21 running database cache-01 192.168.10.31 stopped cache backup-01 192.168.10.41 running backup # column -t で整形する $ column -t /tmp/servers.txt hostname ip_address status role web-01 192.168.10.11 running web db-01 192.168.10.21 running database cache-01 192.168.10.31 stopped cache backup-01 192.168.10.41 running backup
2. TSVファイルを整形する(-s オプション)
タブ区切りのTSVファイルを整形するときは、-s(separator)オプションで区切り文字を指定します。# タブ区切りのTSVファイルを整形する $ column -t -s $'\t' /tmp/data.tsv # またはechoで確認する場合 $ printf "name\tage\tcity\ntaro\t30\ttokyo\nhanako\t25\tosaka\n" | column -t -s $'\t' name age city taro 30 tokyo hanako 25 osaka
$'\t' の形式(ANSI-C quoting)を使います。単純に
-s "\t" と書くと文字通りバックスラッシュ+tとして扱われるため、注意してください。3. CSVファイルを整形する
CSVの区切り文字(カンマ)を指定することで、CSVの内容も整形して確認できます。# CSVファイルを整形して確認する $ cat /tmp/users.csv username,uid,gid,home,shell root,0,0,/root,/bin/bash nobody,65534,65534,/,/sbin/nologin tomohiro,1000,1000,/home/tomohiro,/bin/bash $ column -t -s ',' /tmp/users.csv username uid gid home shell root 0 0 /root /bin/bash nobody 65534 65534 / /sbin/nologin tomohiro 1000 1000 /home/tomohiro /bin/bash
その場合はawkやPythonのcsvモジュールを使ってください。
応用・実務Tips
1. パイプで他のコマンドと組み合わせる
columnコマンドの真価は、他のコマンドとパイプで組み合わせるときに発揮されます。# ps の出力を整形する(ヘッダ行含む) $ ps aux | head -1 && ps aux | grep nginx | column -t # df の出力を整形する $ df -h | column -t Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 3.8G 0 3.8G 0% /dev/shm /dev/nvme0n1p4 197G 45G 152G 23% / /dev/nvme0n1p2 1.0G 291M 734M 29% /boot # /etc/passwd の一部をコロン区切りで整形して確認する $ grep -E "^(root|nobody|tomohiro)" /etc/passwd | column -t -s ':' root x 0 0 root /root /bin/bash nobody x 65534 65534 Kernel Ove.. / /sbin/nologin tomohiro x 1000 1000 /home/tomohiro /bin/bash
2. ログファイルを特定フィールドで絞り込んでから整形する
実務でよく使うのが、awkやgrepで必要な列だけ抽出してからcolumnで整形するパターンです。# アクセスログからIPアドレス・ステータスコード・バイト数を抽出して整形 # (Apache/Nginx のcombinedログ形式の場合) $ awk '{print $1, $9, $10}' /var/log/nginx/access.log | tail -10 | column -t 192.168.1.101 200 15423 192.168.1.102 304 0 10.0.0.55 404 512 192.168.1.101 200 8192 10.0.0.88 500 256 # cronのログから日時とジョブ名だけ取り出して整形する $ grep "CRON" /var/log/syslog | awk '{print $1, $2, $3, $6}' | tail -10 | column -t
3. /etc/fstab や /proc/mounts の内容を確認する
# fstabの内容をスペース区切りで整形する $ column -t /etc/fstab # /etc/fstab UUID=xxxx-xxxx-xxxx-xxxx / xfs defaults 0 0 UUID=yyyy-yyyy-yyyy-yyyy /boot xfs defaults 0 0 UUID=zzzz-zzzz-zzzz-zzzz swap swap defaults 0 0 # 現在のマウント状況を整形して確認する $ cat /proc/mounts | column -t | head -15
4. 出力をファイルに保存して後から確認する
整形した結果をそのままファイルに保存することもできます。# 整形結果をファイルに書き出す $ column -t /tmp/servers.txt > /tmp/servers_formatted.txt # パイプ+リダイレクトで組み合わせる $ ps aux | awk '{print $1, $2, $3, $11}' | column -t > /tmp/ps_summary.txt
トラブルシュート・エラー対処
1. util-linux版とBSD版の違いによる動作の差異
columnコマンドにはutil-linux版とBSD版の2種類があり、RHELやUbuntuはutil-linux版、macOSはBSD版が入っています。util-linux版では
-sで複数文字の区切りを指定できますが、BSD版では1文字のみという制限があります。また、util-linux 2.34以降では
--table-column(または-N)、--table-rightなどの高機能なオプションが追加されています。バージョンは以下のコマンドで確認できます。
$ column --version column from util-linux 2.38.1
2. 出力が崩れる場合
columnコマンドの動作上、入力に日本語など全角文字が含まれると列幅の計算がずれることがあります。全角文字は端末では2カラム分を占めますが、columnは1バイト単位で幅を計算するためです。
日本語を含むデータを整形したい場合は、
awkで数値フィールドだけを抽出する、もしくはPythonのtabulateライブラリを検討してください。3. 「column: line too long」エラーが出た場合
非常に長い行を含む大きなファイルを処理しようとすると、以下のエラーが出ることがあります。column: line too long
4. 空行が含まれると整形が崩れる場合
ファイルに空行が含まれると、整形結果が崩れることがあります。grepで空行を除外してからcolumnに渡すと解決できます。
# 空行とコメント行を除外してから整形する $ grep -v '^#' /etc/fstab | grep -v '^$' | column -t
本記事のまとめ
columnコマンドの主な使い方をまとめます。| やりたいこと | コマンド |
|---|---|
| スペース区切りのファイルを整形する | column -t ファイル名 |
| TSVファイルを整形する | column -t -s $'\t' ファイル名 |
| CSVファイルを整形する | column -t -s ',' ファイル名 |
| コロン区切りのファイルを整形する | column -t -s ':' /etc/passwd |
| パイプで前段コマンドの出力を整形する | df -h | column -t |
| 空行・コメント行を除外してから整形する | grep -v '^#' ファイル | grep -v '^$' | column -t |
| 整形結果をファイルに保存する | column -t ファイル名 > 出力ファイル名 |
特に
ps・df・awkなどの出力に組み合わせると威力を発揮します。日常の調査・確認作業にぜひ取り入れてみてください。
ログ整形やデータ処理で、毎回ネット検索に頼っていませんか?
columnコマンド1つとっても、オプションの使い分けやパイプの組み合わせ方を知らなければ、実務での活用に限界があります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:readlinkコマンドでシンボリックリンクのパスを確認する方法|-fオプションで絶対パス解決も
- この記事の属するカテゴリ:Linuxtips・テキスト処理へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます