連載
» 2016年11月09日 05時00分 UPDATE

Linux基本コマンドTips(63):【 sort 】コマンド――テキストファイルを行単位で並べ替える

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「sort」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、テキストファイルを行単位で並べ替えるための「sort」コマンドです。

sortコマンドとは?

 「sort」は、テキストファイルを“行単位で並べ替える”コマンドです。他のコマンドの実行結果を並べ替える場合にも使用できます。また、空白やカンマ区切りのデータに対し、並べ替えに使用するフィールドを指定することも可能です。


sortコマンドの書式

sort [オプション] [ファイル1 ファイル2……]

※[ ]は省略可能な引数を示しています




sortコマンドの主なオプション

 sortコマンドの主なオプションは次の通りです。

●並べ替え関連
短いオプション 長いオプション 意味
-f --ignore-case 大文字/小文字を区別しないで並べ替える
-V --version-sort 自然な(バージョン)数字順で並べ替える
-n --numeric-sort 文字列を数値と見なして並べ替える
-h --human-numeric-sort 人が読むことのできる形式の数値で並べ替える(例:2K、1Gなど)
-g --general-numeric-sort 一般的な数値として並べ替える
-M --month-sort 月名で並べ替える(不明、JAN……DECの順)
-d --dictionary-order データが空白と英数字のみ含まれていると仮定して並べ替える
-b --ignore-leading-blanks 先頭の空白を無視して並べ替える
-i --ignore-nonprinting 表示可能な文字だけを対象に並べ替える
-R --random-sort キーのランダムハッシュ順に並べ替える
--random-source=ファイル ランダムソースのファイルを設定する
--sort=指定 並べ替えの方法を指定する(general-numeric、human-numeric、month、numeric、random、version)
-r --reverse 逆順で並べ替える
-k 指定 --key=指定 場所と並べ替え種別を指定する(「-k 2」なら2列目、「-k 2n」なら2列目を数値として並べ替える。複数指定する場合は「-k」オプションを複数回指定する)
-t 文字 --field-separator=文字 フィールドの区切り文字を指定する(デフォルトは空白文字)

●その他
短いオプション 長いオプション 意味
-m --merge 並べ替えられたファイルをマージする(並べ替え自体は行わない)
-c --check,--check=diagnose-first 並べ替えられているかどうかを確認する
-C --check=quiet,--check=silent 「-c」」と同様だが、メッセージは出力しない(スクリプト内の判定行などで使用)
-u --unique 同一行は1つ目だけを出力する(「-c」と併せて使用した場合、厳密に順序を確認する)
-z --zero-terminated 最後にNULL文字を出力する
-o ファイル名 --output=ファイル名 結果を出力するファイル名を指定する(デフォルトは標準出力)
--files0-from=F NULL文字で区切られたファイル名のリストを指定する(「--files0-from=- 」とした場合、ファイル名を標準入力から読み込む:本連載第62回参照
--debug 並べ替えに使用されている行の一部に注釈を付けて、不確かな使用方法について標準エラー出力に警告を表示する


テキストファイルを並べ替える

 「sort ファイル名」で、ファイルを並べ替えます。逆順で並べ替えたい場合は「sort -r ファイル名」とします。

コマンド実行例

sort ファイル名

(ファイルを並べ替える)(画面1の赤枠部分

sort -r ファイル名

(ファイルを逆順で並べ替える)(画面1の青枠部分


画面1 画面1 「sampledata.csv」の中身を並べ替えた(赤枠部分)。「-r」オプションを付けると、逆順での並べ替えになる(青枠部分)


数値の大小で並べ替える

 「パイプ(|)」と組み合わせることで、コマンドの出力結果を並べ替えることができます。例えば、「du -s * | sort」と指定すると、「du」コマンド(ディレクトリのディスク容量を調べるコマンド。「-s」はサブディレクトリを表示せずに合計だけを出力するオプション:本連載第59回参照)の結果を並べ替えます。

 sortコマンドのデフォルトでは、数字も文字と同じように並べ替えられます。例えば、「1」と「11」と「100」では、「1」→「100」→「11」の順番になります。これを数値として「1」→「11」→「100」の順で並べ替えるには、「-n」オプションを使用します。

 この他、「K」や「G」などの単位も考慮して並べ替える「-h(--human-numeric-sort)」オプションや、「1.1a」のようなバージョン記号を考慮する「-V(--version-sort)」などがあります。

コマンド実行例

du -s * | sort

(duコマンドの出力結果を並べ替える)(画面2の赤枠部分

du -s * | sort -n

(duコマンドの出力結果を数値として並べ替える)(画面2の青枠部分


画面2 画面2 duコマンドの出力結果を並べ替えた結果(赤枠部分)。「-n」オプションを付けると、数値が考慮された並び順になる(青枠部分)


フィールドを指定して並べ替える

 「-k」オプションを使うと、並べ替えに使用する「フィールド」を指定できます。例えば、duコマンドの結果の2番目のフィールド、つまり「ディレクトリ名」で並べ替えるには、「du -s * | sort -k 2」のように指定します。さらに、2番目のフィールドで逆順に並べ替えるならば、「du -s * | sort -k 2r」と指定します。

コマンド実行例

du -s * | sort -k 2

(duコマンドの結果を2つ目のフィールドで並べ替える)(画面3の赤枠部分

du -s * | sort -k 2r

(duコマンドの結果を2つ目のフィールドで逆順に並べ替える)(画面3の青枠部分


画面3 画面3 duコマンドの結果を2つ目のフィールド(ディレクトリ名)で並べ替えた(赤枠部分)。逆順で並べ替えることも可能(青枠部分)


CSVデータを並べ替える

 「-k」オプションでは、空白文字を区切りとして、並べ替えに使うフィールドを指定することができます。区切り文字を変更したい場合は、「-t」オプションで使用する文字を指定します。

 例えば、CSV(comma-separated values)データの場合、区切り文字は「,(カンマ)」なので「-t ,」または「-t ","」のように指定します。

 なお、3番目のフィールドの値を数値として並べ替える場合は「-k 3n」、数値としてさらに逆順で並べ替えるなら「-k 3nr」のように指定します。

コマンド実行例

sort -k 3 -t , sampledata.csv

(区切り文字を「,」として、3番目のフィールドで並べ替える)

sort -k 3n -t , sampledata.csv

(区切り文字を「,」として、3番目のフィールドの値を数値として並べ替える)(画面4


画面4 画面4 区切り文字を「,」として、「sampledata.csv」の3番目のフィールドを数値として並べ替えた


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。