【Linux】columnコマンドの使い方|CSVやテキストを表形式に整形

【Linux】columnコマンドの使い方|CSVやテキストを表形式に整形

PR Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:5,030

Linuxのcolumnコマンドを使って、空白区切りやCSV・TSVなどのテキストを見やすい表形式(テーブル)に整列させる方法を解説します。基本の-tオプションや区切り文字を指定する-sオプション、ヘッダー追加(-N)やJSON変換(-J)まで実機検証の例とともに紹介します。

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

初心者向け

わかばちゃんと学ぶ サーバー監視

難易度
実用性
読みやすさ

マンガと図解が中心で圧倒的に読みやすい。負荷調査の手法がスッと理解できるようになります。

新しいLinuxの教科書 第2版

難易度
実用性
読みやすさ

一生モノの基礎知識が身につく定番書です。

ゼロからわかる Linuxコマンド200本ノック―基礎知識と頻出コマンドを無理なく記憶に焼きつけよう!

難易度
実用性
習得度

アウトプット重視で記憶に定着しやすい。反復練習でLinux操作が自由自在になります。

エンジニア1年生のための世界一わかりやすいLinuxコマンドの教科書

難易度
実用性
読みやすさ

LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネルのターミナル上でCSVCSV [シーエスブイ]Comma-Separated Values。カンマ区切りのデータ形式ファイルや設定ファイル、各種コマンドの出力結果を確認する際、「文字数の違いで列の位置がガタガタにずれて読みにくい」「カンマ区切りやコロン区切りのデータを、ターミナル上で綺麗な表として一覧表示したい」といった場面はよくあります。

この記事では、テキストデータの文字数を自動で計算し、列幅を揃えた表形式(テーブル)や複数列のリストに整形できる column コマンドの使い方を解説します。基本となる -t・-s オプションの組み合わせから、ヘッダー行の付与や右寄せ、JSONJSON [ジェイソン]JavaScript Object Notation。軽量データ交換フォーマット形式への変換といった便利な機能までを具体例とともに紹介します。

この記事を読むことで、column コマンドの仕組みを正しく理解し、日々のログ確認や設定ファイルの閲覧を見やすく効率化できるようになります。

確認した環境

本記事で解説するコマンドや出力結果は、以下の環境で実機検証を行っています(バージョン確認コマンド: column --version)。

OSOS [オーエス]Operating System。基本ソフトウェアパッケージ・バージョン
DebianDebian [デビアン]コミュニティ主導で開発される安定性の高いLinuxディストリビューション GNU/Linux 11 (bullseye)util-linux 2.36.1(column from util-linux 2.36.1)
UbuntuUbuntu [ウブントゥ]人気のLinuxディストリビューション 24.04 LTSutil-linux 2.39.3(column from util-linux 2.39.3)
AlmaLinux 9.4util-linux 2.37.4(column from util-linux 2.37.4)

Linuxのcolumnコマンドとは?テキストを表形式や複数列に整列する機能

column コマンドは、入力されたテキストの列幅(文字数)を自動で計算し、複数列のリストや縦のラインが揃った表形式(テーブル)に整形して標準出力へ書き出すコマンドです。多くのLinuxディストリビューションに標準搭載されている util-linux パッケージに含まれています。

paste・cut・awkコマンドとの違いと使い分け

Linuxで列データを扱うコマンドには paste や cut、awk などがあります。それぞれの役割と column との違いは以下の通りです。

コマンド主な役割・特徴向いている用途
column各列の最大文字数に合わせて空白を補い、見た目の列幅を揃えて表形式に整列するCSV・TSV・設定ファイル・コマンド出力のターミナル上での可視化・整形
paste複数ファイルの対応する行をタブや指定文字で横方向に結合する別ファイルに分かれた列データの単純結合、縦並びデータの1行化
cut区切り文字や文字位置を指定して特定の列(フィールド)を切り出すCSVやログファイルから必要な列だけを抽出する処理
awk列単位の抽出・条件分岐・計算・printf による書式指定出力を行う条件に合う行のフィルタリング、数値の集計、固定幅フォーマットの生成

pasteコマンドが「複数のファイルを横に繋げる」ためのコマンドであるのに対し、column コマンドは「すでに区切られているデータの各列の幅を揃えて、人間が読みやすい表に整える」ためのコマンドです。cutコマンドやawkコマンドで必要な列を抽出したあと、パイプ(|)で最後に column -t へ渡して画面表示を整えるという連携がよく使われます。

基本構文と主なオプション一覧

column コマンドの基本構文は以下の通りです。

Terminal window
column [オプション] [ファイル名...]

ファイル名を省略した場合は、標準入力(stdin)からデータを読み取ります。そのため、他コマンドの出力をパイプ(|)で受け取って整形する使い方が一般的です。

column コマンドでよく使用する主なオプションは以下の通りです。

オプション長い形式役割
-t--table入力データの列数を自動判別し、列幅を揃えた表形式(テーブル)を作成する
-s <文字>--separator <文字>-t 使用時に、入力データの区切り文字(カンマやコロンなど)を指定する
-o <文字列>--output-separator <文字列>-t 使用時に、出力する列と列の間の区切り文字列を指定する(デフォルトは半角スペース2つ)
-N <名前,...>--table-columns <名前,...>カンマ区切りでテーブルのヘッダー(列名)を指定して1行目に表示する
-R <列,...>--table-right <列,...>指定した列(列名または列番号)のテキストを右寄せにする
-H <列,...>--table-hide <列,...>指定した列を非表示にする(出力しない)
-O <列,...>--table-order <列,...>出力する列の並び順を列名または列番号で指定する
-J--jsonテーブルをJSON形式で出力する(-n でルート名、-N でキー名を指定)
-c <文字数>--output-width <文字数>オプションなし(リスト整列)または折り返し時の出力幅を文字数で指定する
-x--fillrowsオプションなし(リスト整列)の際、縦方向(列)ではなく横方向(行)へ順番に並べる

【基本】-t・-sオプションでテキストやCSVを表形式に整列する

実務で column コマンドを使う場面のほとんどは、-t(--table)オプションを使った表形式への整形です。まずはサンプルファイルを作成し、基本的な動作を確認します。

空白やタブ区切りのテキストを表形式に揃える(-t)

オプションに -t のみを指定すると、入力データの空白(スペースまたはタブ)を区切り文字として自動認識し、各列の最大文字数に合わせて縦のラインを揃えて出力します。

Terminal window
# 空白区切りのサンプルファイルを作成する
$ printf "ID Name Role Port\n1 web-server01 frontend 80\n2 app-backend-server01 api 8080\n3 db-primary database 5432\n" > servers.txt
# -t オプションで表形式に整列する
$ column -t servers.txt
ID Name Role Port
1 web-server01 frontend 80
2 app-backend-server01 api 8080
3 db-primary database 5432

文字数が異なる web-server01 と app-backend-server01 の後ろに適切な数のスペースが補われ、Role 列や Port 列の開始位置が綺麗に揃っていることがわかります。

カンマ区切り(CSV)やコロン区切りを表形式にする(-sと-tの併用)

CSVファイル(カンマ区切り)や /etc/passwd(コロン区切り)のように、空白以外の文字で区切られたデータを整形する場合は、-s オプションで入力の区切り文字を指定し、-t オプションと組み合わせて実行します。

Terminal window
# カンマ区切り(CSV)のサンプルファイルを作成する
$ printf "1,web-server01,frontend,80\n2,app-backend-server01,api,8080\n3,db-primary,database,5432\n" > servers.csv
# 区切り文字にカンマ(,)を指定して表形式に整列する
$ column -s ',' -t servers.csv
1 web-server01 frontend 80
2 app-backend-server01 api 8080
3 db-primary database 5432

同様に、コロン(:)で区切られた /etc/passwd ファイルも、column -s ':' -t を使うと各フィールドが揃った一覧表として確認できます。

Terminal window
$ head -n 3 /etc/passwd | column -s ':' -t
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

出力時の区切り文字列を変更して罫線風にする(-o)

column -t で出力される列と列の間は、デフォルトでは「半角スペース2つ」で区切られます。-o(--output-separator)オプションを使うと、出力時の区切り文字列を任意の文字列に変更できます。

例えば、前後にスペースを入れた縦棒(' | ')を指定すると、コンソール上のテーブル表示やMarkdownの表に近い見た目で出力できます。

Terminal window
$ column -s ',' -t -o ' | ' servers.csv
1 | web-server01 | frontend | 80
2 | app-backend-server01 | api | 8080
3 | db-primary | database | 5432

【応用】ヘッダー追加・右寄せ・列の非表示・JSON出力(util-linux版)

現行のLinuxディストリビューション(Ubuntu、Debian、AlmaLinux、Rocky Linuxなど)に搭載されている util-linux 版の column コマンドには、単なる空白揃えだけでなく、高機能なテーブル操作オプションが用意されています。

列名(ヘッダー)の付与(-N)と数値の右寄せ(-R)

ヘッダー行を持たないCSVやコマンド出力に対して、-N(--table-columns)オプションでカンマ区切りの列名を指定すると、1行目にヘッダーを表示できます。さらに -R(--table-right)オプションで列名(または 1 始まりの列番号)を指定すると、数値の列を見やすく右寄せにできます。

Terminal window
# ヘッダー(ID,HOST,ROLE,PORT)を付与し、ID列とPORT列を右寄せにする
$ column -s ',' -t -N 'ID,HOST,ROLE,PORT' -R 'ID,PORT' servers.csv
ID HOST ROLE PORT
1 web-server01 frontend 80
2 app-backend-server01 api 8080
3 db-primary database 5432

特定列の非表示(-H)と列の並び替え(-O)

-N オプションで各列に名前を付けておくと(または列番号を使うと)、不要な列を隠したり、列の表示順を入れ替えたりすることも可能です。

  • -H(--table-hide):指定した列を出力から隠す
  • -O(--table-order):指定した順番に列を並べ替える
Terminal window
# ROLE列を非表示にする(-H)
$ column -s ',' -t -N 'ID,HOST,ROLE,PORT' -H 'ROLE' servers.csv
ID HOST PORT
1 web-server01 80
2 app-backend-server01 8080
3 db-primary 5432
# HOST, PORT, ID の順番に列を並べ替える(-O)
$ column -s ',' -t -N 'ID,HOST,ROLE,PORT' -O 'HOST,PORT,ID' servers.csv
HOST PORT ID ROLE
web-server01 80 1 frontend
app-backend-server01 8080 2 api
db-primary 5432 3 database

-O オプションで一部の列名だけを指定した場合、指定しなかった残りの列(上記の例では ROLE)は末尾に配置されます。特定の列だけを取り出して並べ替えたい場合は、-H オプションと併用してください。

テキストデータをJSON形式に変換する(-J)

-J(--json)オプションを使用すると、区切り文字で分割したテーブルデータをそのままJSON形式へ変換して出力できます。-N オプションで各フィールドのキー名を指定し、必要に応じて -n(--table-name)オプションでJSON配列の親キー名を指定します。

Terminal window
$ column -s ',' -t -J -n 'servers' -N 'id,host,role,port' servers.csv
{
"servers": [
{"id":"1", "host":"web-server01", "role":"frontend", "port":"80"},
{"id":"2", "host":"app-backend-server01", "role":"api", "port":"8080"},
{"id":"3", "host":"db-primary", "role":"database", "port":"5432"}
]
}

オプションなし(デフォルト)で縦並びリストを複数列に並べる

なお、-t オプションを付けずに column コマンドを実行した場合は、表形式の整列ではなく、縦に並んだ1列のリストを画面幅(または -c で指定した文字幅)に収まるよう複数列に折り返して並べる動作になります。

デフォルトでは縦方向(列優先)にデータが並びますが、-x(--fillrows)オプションを付けると横方向(行優先)に順番が並びます。

Terminal window
# デフォルト:縦方向(上→下)に順番に並べる(幅30文字指定)
$ seq 1 6 | column -c 30
1 3 5
2 4 6
# -x オプション:横方向(左→右)に順番に並べる(幅30文字指定)
$ seq 1 6 | column -x -c 30
1 2 3
4 5 6

このように、-t の有無によって「複数列の表形式(テーブル)として縦の列幅を揃える」か「1列のリストを複数列へ折り返す」かが切り替わるため、用途に応じて使い分けます。

実務でcolumnコマンドを使う際の注意点

column コマンドをシェルスクリプトや日常のログ解析で利用する際は、以下の2つの仕様に注意してください。

1. 空のフィールド(連続する区切り文字)の扱いとバージョン差

CSVファイルなどに 2,,8080 のような空のカラム(連続する区切り文字)が含まれている場合、column コマンドのバージョンや実装によって空フィールドが維持されるか無視されるかが異なります。

現行のLinux(util-linux 2.30以降)の column -s ',' -t では、以下のように空のフィールドも1つの空カラムとして維持され、列ずれを起こさずに整列されます。

Terminal window
# util-linux版の column では空フィールドも維持される
$ printf "1,web01,80\n2,,8080\n" | column -s ',' -t
1 web01 80
2 8080

一方で、古いバージョンの util-linux や BSD系(macOSmacOS [マックオーエス]Appleが開発するMac用のオペレーティングシステムなど)の column コマンドでは、連続する区切り文字が1つにまとめられてしまい、後ろの列が左に詰まって列ずれを起こす仕様になっている場合があります(BSD系では -n オプションで空列の結合を防ぐなど、オプション体系も異なります)。異なるOS間で動くスクリプトを書く場合は、この挙動の違いに留意してください。

2. 引用符(“)で囲まれたCSV内のカンマは区別されない

column -s ',' -t では、ダブルクォーテーション(")で囲まれたフィールド内のカンマも区切り文字として扱われる点に注意が必要です。

column コマンドはCSVの構文(RFC 4180など)を解析するわけではなく、単純に -s で指定した文字が現れた位置でフィールドを分割します。そのため、1,"Tokyo, Japan",80 のように引用符の中にカンマが含まれているデータでは、意図しない位置で列が分割されてしまいます。

引用符やエスケープを含む複雑なCSVファイルを正確に解析・処理したい場合は、PythonPython [パイソン]汎用プログラミング言語の csv モジュールや専用ツールを使用してください。

まとめ:columnコマンドでテキストやCSVの閲覧を見やすく効率化しよう

本記事では、Linuxの column コマンドを使って空白区切りテキストやCSVファイルを表形式に整形する方法について解説しました。

記事の要点を以下にまとめます。

  • column -t を実行すると、空白区切りのテキストの各列幅を自動計算し、縦のラインが揃った表形式(テーブル)に整列できる。
  • CSVや /etc/passwd など空白以外の文字で区切られたデータは、column -s ',' -t や column -s ':' -t のように -s オプションで区切り文字を指定する。
  • -o ' | ' で出力時の区切り文字列を変更できるほか、util-linux 版では -N(ヘッダー追加)、-R(右寄せ)、-H(非表示)、-J(JSON変換)などのオプションも利用できる。
  • オプションなし(または -x)で実行した場合は、縦1列のリストを画面幅に合わせて複数列に折り返して表示できる。

パイプラインの末尾に | column -t を付け足すだけで、ターミナル上でのデータの視認性が大きく向上します。列の抽出やテキスト検索を行う他のコマンドとの組み合わせについては、Linuxのテキスト処理・検索コマンドの使い方まとめもあわせて参考にしてください。


以上で本記事の解説を終わります。
よいITライフを!
ITナレッジライフ 運営者
この記事を書いた人

Z (ITナレッジライフ)

現役のITエンジニア。Linux、プログラミング、IT用語など、日々の業務で得た「痒いところに手が届く」技術情報を発信しています。

プロフィールと編集ポリシーを見る →

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

人気記事


記事を評価

Thanks!
目次
Scroll to Top