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]$