Linuxコマンド辞典 sortコマンド(テキスト処理)

ファイルの内容をソートする「sort」コマンドの概要と使い方を記載しています。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

参考サイト:Man page of INSTALL

概要・使用方法

指定されたファイルの内容をソートして標準出力に出力します。複数のファイルを指定した場合は、マージ(入力を合併)してソートします。入力ファイルに「-」を指定した場合は標準入力が利用されます。

書式

$ sort [オプション] [ファイル名・・・]

オプション

-c
–check
指定したファイルがソート済かどうかをチェックする。ソートされていない場合はエラーメッセージを出して終了する
-m
–merge
複数のファイルをソートしてマージする。入力ファイルはソート済みであることが条件となる
-b
–ignore-leading-blanks
行頭の空白を無視する
-d
–dictionary-order
アルファベットや数字、空白以外を無視する
-f
–ignore-case
小文字と大文字を区別しない
-n
–numeric-sort
数値ソートする
-i
–ignore-nonprinting
印字できない文字を無視する
-k キー
–key=キー
キーで指定した項目でソートする
-r
–reverse
出力を逆順にする
-M
–month-sort
最初の3文字を付きの省略形と見なす
-o 出力ファイル名
–output 出力ファイル名
指定したファイル名で出力する。
-t 文字
–field-separator=文字
区切り文字に指定する文字を利用する(デフォルトは空白)
-z
–zero-terminated
改行の代わりにNULL文字を付加する

ファイル内の文字列をソートする

$ sort ファイル名

実行結果

[sunarin@localhost work]$ cat abcde.txt 
a
c
b
h
b
a
d
c
f
i
e
[sunarin@localhost work]$ sort abcde.txt 
a
a
b
b
c
c
d
e
f
h
i
[sunarin@localhost work]$ 

ファイル内の数値をソートする

数値をソートする場合は、-nオプションを使用します。使用しなかった場合は、1と10同じと見なしてソートします。

$ sort -n ファイル名

実行結果

「-n」オプションを使用しなかった場合の結果

[sunarin@localhost work]$ cat sample.txt  
10
1
3
2
4
6
5
8
9
7
1500
2003
1000
[sunarin@localhost work]$ sort sample.txt 
1
10
1000
1500
2
2003
3
4
5
6
7
8
9
[sunarin@localhost work]$

「-n」オプションを使用した結果

[sunarin@localhost work]$ sort -n sample.txt 
1
2
3
4
5
6
7
8
9
10
1000
1500
2003
[sunarin@localhost work]$ 

ファイル内の文字列を逆順にソートする

逆順にソートする場合は、「-r」オプションを使用します。

$ sort -r ファイル名

実行結果

[sunarin@localhost work]$ sort -n -r sample.txt 
2003
1500
1000
10
9
8
7
6
5
4
3
2
1
[sunarin@localhost work]$ 

ソートするフィールドを指定する

並べ替えの基準は先頭の文字列となります。しかし、スペースやタブ、カンマなどによって区切られたファイルを並べ替える場合は、先頭ではなく別の文字列を指定する必要があります。

その場合は、-kオプションを使用してソートフィールドを指定することができます。空白で区切った文字列をフィールドと呼び、-kオプションの引数にフィールド位置をセットします。

$ sort -t : -k フィールド位置 ファイル名

実行結果

4フィールド目を数値でソートする

[sunarin@localhost work]$ sort -t : -k 4,4n /etc/passwd | head -n 5
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync

ソートされた2つ以上のファイルをマージする

$ sort -m ファイル名1 ファイル名2

実行結果

[sunarin@localhost work]$ cat comm1.txt 
A
B
C
D
Fgg
[sunarin@localhost work]$ cat comm2.txt 
A
B
C
D
E
G
[sunarin@localhost work]$ sort -m comm1.txt comm2.txt 
A
A
B
B
C
C
D
D
E
Fgg
G
[sunarin@localhost work]$ 

ソート結果を別ファイルに出力する

-oオプションを使用することで、別ファイルにソート結果を出力することができます。

$ sort -o 出力ファイル名 入力ファイル名1 入力ファイル名2

実行結果

[sunarin@localhost work]$ sort -o output_soft.txt  comm1.txt comm2.txt 
[sunarin@localhost work]$ ls output_soft.txt 
output_soft.txt

重複行を1つにまとめて表示する

例えば、Webサーバーのアクセスログをアクセス元のIPアドレスを抜き出したい時に、重複していると見づらいので1つにまとめたいシーンがあります。その場合は、sortコマンドとuniqコマンドをパイプでつなげて実行することで、重複行を1つにまとめることができます。

sortコマンドに-fオプションをつけて大文字と小文字を区別しないようにしています。

$ sort -f ファイル名 | uniq -i

実行結果

[sunarin@localhost work]$ sort comm1.txt comm2.txt 
A
A
B
B
C
C
D
D
E
Fgg
G
[sunarin@localhost work]$ sort -f  comm1.txt comm2.txt | uniq -i
A
B
C
D
E
Fgg
G
[sunarin@localhost work]$