ファイル内文字列のソート
sortコマンド
sort
コマンドは、引数で指定されたファイルや、標準入力を並べ替えます。利用方法は次のようになります。
$ sort [オプション] [ファイル名]
主なオプションは次のとおりです。
オプション | 説明 |
---|---|
-b | 先頭の空白を無視する |
-d | 英文字、数字、空白以外の文字を無視する |
-k [数値] | [数値]番目の列以降をキーとしてソートする ([数値]を[数値A,数値B]とすると、[数値A]番目~[数値B]番目の列をキーとしてソートする) ([数値]を[列番号.桁数] とすると、ある列の桁数を指定してソートする) |
-[数値] | [数値]番目の列までをキーとしてソートする |
-m | 複数のファイルをソートしながらマージする |
-n | 先頭の文字列を数値として扱う(例:10、101、2 は 2、10、101と並び替える) |
-r | 結果を降順にする(逆にする) |
-t [文字] | 列の区切り文字を[文字]で指定した文字にする |
-u | 重複行を出力しないようにする(「sort | uniq」と同じ) |
-z | 「\0」(ヌル文字)を区切り文字とする |
例)CSV形式のファイルの2列目をソート対象として、昇順で並び替える
$ cat test.csv 1,30,5,6 3,4,5,5 2,6,3,2 $ sort -t , -n -k 2 test.csv 3,4,5,5 2,6,3,2 1,30,5,6
「,
(カンマ)」を区切り文字として、文字列を数値として扱うことで並び替えています。
POSIXのバージョン(POSIX 1003.1-2001(200112:2001年12月以降))によっては、「-k 数値
」オプションを「+数値
」と指定するとWarning
が出力されます。
$ sort -t, -n +1 test.csv sort: Warning: "+number" syntax is deprecated, please use "-k number"
ここで、「+1
」が、2番目とそれ以降の列をもとにソートするという意味になります。この場合、次のように古いバージョンのPOSIXを指定して回避するか、「-k
」オプションを利用してください。
$ export POSIX2_VERSION=199209 $ sort -t, -n +1 test.csv
なお、head -[数値]
、またはtail +[数値]
なども同様です。
uniqコマンド
uniq
コマンドは、テキストファイル内の重複行を確認できます。利用方法は次のようになります。
$ uniq [オプション] [ファイル名]
主なオプションは次のとおりです。
オプション | 説明 |
---|---|
-c | 同一行の数も出力する |
-d | 重複行のみ表示する |
-u | 重複のない行のみ表示する |
例)ファイルの重複行を1行にまとめ、同一行の数を出力
$ cat test.txt apple apple apple grape grape peach $ uniq -c test.txt 3 apple ← appleの文字列がファイル中に3つ存在する 2 grape 1 peach