sortはファイルの内容を並べ替えるコマンドだ。
sortコマンドの基本
コマンドの基本動作
使い方は、次のとおりだ。
$ sort ファイル名
ファイルdata1.txtは、次のような内容だ。
1 2 3 4 |
10 5 32 1 |
ファイルdata1.txtを並べ替えする場合は、次のコマンドだ。
$ sort data1.txt
データが昇順で並べ替えされた。
並べ替えの内容が、1、10、32、5という順序になるのは、1文字目の小さい順に並ぶからだ。
sortコマンドの標準では文字として左側から昇順に並べ替えを行った並び方になる。
次に説明するが、オプションを使用することで、文字としてではなく数値として並べ替えたり、降順で並べ替えたりすることができる。
sortコマンドの結果をファイルに出力する
sortコマンドは、ディスプレイに結果を表示するが、大量のデータを処理した場合は、ファイルに出力した方が都合がよい。
ファイルに出力するには、リダイレクトする。
書式は次の通りだ。
$ sort 並べ替え対象ファイル > 並べ替え出力ファイル
data1.txtの並べ替えの結果をファイルdata1_sort.txtとして保存する場合は次の通りだ。
$ sort data1.txt > data1_sort.txt
sortコマンドのオプションたち
オプションの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション-n(オプション--numeric-sort)
数値として並べ替える。
オプション-r(オプション--reverse)
降順で並べ替える。
オプション-tオプション--field-separator)
項目の区切りを指定する。
オプション-k(オプション--key)
キーを指定して並べ替える。
オプション-u(オプション--unique-r)
重複行を省いて並べ替える。
オプション-f(オプション--ignore-case-u)
大文字小文字を関係なく並べ替える。
一つずつ見ていこう。
-nオプション(--numeric-sort):数値として並べ替える
数値として並べ替えを行う書式は次のとおりだ。
$ sort -n ファイル名
ファイルdata1.txtを数値として並べ替えする場合は、次のコマンドだ。
$ sort -n data1.txt
ファイルdata1.txtが数値として並べ替えされた。
-rオプション(--reverse):降順で並べ替える
数値として並べ替えを行う書式は次のとおりだ。
$ sort -r ファイル名
ファイルdata1.txtを数値として降順で並べ替えする場合は、次のコマンドだ。
$ sort -r -n data1.txt
ファイルdata1.txtを数値として降順で並べ替えされた。
-tオプション(--field-separator):項目の区切りを指定する
ファイルdata2.txtは、次のような内容だ。
1 2 3 4 5 |
01:orange:250:Tokyo 02:apple:230:Nagoya 03:apple:130:Nagoya 04:grape:450:Tokyo 05:orange:150:Osaka |
「:」で区切られている。
さまざまなデータファイルは、このようにある文字で区切られていることが多い。
このような区切り文字を指定する場合に-tオプションを使用する。
書式は次の通りだ。
$ sort -t 区切り文字 ファイル名
-tオプションは、次の-kオプションと組み合わせて利用する。
-kオプション(--key):キーを指定して並べ替える
並べ替えの基準の項目を指定して並べ替えを行う書式は次のとおりだ。
$ sort -k 並べ替えに使う項目番号 -t 区切り文字 ファイル名
ファイルdata2.txtを「:」で区切り、2項目目の品名で並べ替えする場合は、次のコマンドだ。
$ sort -k 2 -t ":" data2.txt
ファイルdata2.txtが2項目目の品名でアルファベット順に並べ替えされた。
ただし、上記の場合だと2項目目以降で並べ替えとなる。
2項目目だけで並べ替えを行う場合は、次のコマンドだ。
$ sort -k 2,2 -t ":" data2.txt
2項目目だけで並べ替えを行った。
「,」を挟むことで優先項目の開始と優先項目の終了を指定できる。
2項目目と3項目目で並べ替えを行う場合は、次のコマンドだ。
$ sort -k 2,3 -t ":" data2.txt
この場合、2項目目を最優先、3項目目がその次に優先となる。
$ sort -k 2,4 -t ":" data2.txt
この場合、2項目目を最優先、4項目目がその次に優先となるのではなく、2項目目が第一優先、3項目目が第二優先、4項目目が第三優先となる。
-uオプション(--unique-r):重複行を省いて並べ替える
ファイルdata3.txtは、次のような内容だ。
1 2 3 4 5 6 |
Taro Jim Kenta Taro Hanako Kenta |
TaroとKentaが重複している。
この重複したデータを削除するオプションが-uオプションで、書式は次のとおりだ。
$ sort -u ファイル名
ファイルdata3.txtの中から重複データを削除し、並べ替えする場合は、次のコマンドだ。
$ sort -u data3.txt
ファイルdata3.txtが重複データを削除しつつ、アルファベット順で並べ替えされた。
-fオプション(--ignore-case-u):大文字小文字を関係なく並べ替える
ファイルdata4.txtは、次のような内容だ。
1 2 3 4 5 |
Tokyo Osaka Nagoya OSAKA tokyo |
Tokyoとtokyo、OsakaとOSAKAのように大文字小文字が混在している。
sortオプションの標準では大文字と小文字は区別するために、aからzの次にAからZが並ぶ。
この大文字小文字を区別しないオプションが-fオプションで、書式は次のとおりだ。
$ sort -f ファイル名
ファイルdata4.txtを大文字小文字を区別せずに並べ替えする場合は、次のコマンドだ。
$ sort -f data4.txt
ファイルdata4.txtを大文字小文字を区別せずに並べ替えされた。
sort関連コマンド
最後にsortコマンドに関連して、基本的なテキスト処理のコマンドも紹介しておく。
cutコマンド
文字列を分離する。
まとめ
今回は、sortコマンドを使ったテキスト形式のファイルの並べ替えの方法を解説した。
様々なデータはcsv形式と呼ばれるカンマ区切りのテキスト形式のファイルで管理されることが多い。
また、並べ替えた結果は、リダイレクトすることでファイルに書き出せることも覚えておこう。
-kのオプションは各順番は影響しませんよね?
左から強い気がします。
例えば3番目でソートした後で2番目でソートは
sort -k 3,2 -t ":" data2.txt
にしてもだめでした。
ご愛読いただきありがとうございます。
-kオプションは複数記述が可能ですので、ソートの順番を右→左のように行う場合には以下のようになります。
sort -k 3,3 -k 2,2 -t ":" data2.txt