【 sort 】コマンド――テキストファイルを行単位で並べ替える:Linux基本コマンドTips(63)
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「sort」コマンドです。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、テキストファイルを行単位で並べ替えるための「sort」コマンドです。
sortコマンドとは?
「sort」は、テキストファイルを“行単位で並べ替える”コマンドです。他のコマンドの実行結果を並べ替える場合にも使用できます。また、空白やカンマ区切りのデータに対し、並べ替えに使用するフィールドを指定することも可能です。
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の青枠部分)
数値の大小で並べ替える
「パイプ(|)」と組み合わせることで、コマンドの出力結果を並べ替えることができます。例えば、「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の青枠部分)
フィールドを指定して並べ替える
「-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の青枠部分)
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)
筆者紹介
西村 めぐみ(にしむら めぐみ)
PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.