sortコマンドは、LinuxおよびUnixシステムで、ファイルの内容を特定の順序で並べ替えるために使用されます。並べ替えコマンドを使用して、ファイル内の行、アルファベット、数値を並べ替えます。
並べ替えコマンドには、順序を逆にしたり、ファイルを数値で並べ替えたり、テーブルを列番号で並べ替えたり、ファイルが既に並べ替えられているかどうかを確認したり、重複を削除したりするための便利なオプションが多数あります。
このチュートリアルでは、いくつかの実用的な例を使用して、Linuxでのsortコマンドについて学習します。
並べ替えコマンドとその構文
次の行は、sortコマンドの構文を示しています。
sort [options] [files]
デフォルトではSTDINからの入力を受け取りますが、ファイル名が引数として指定されている場合はファイルを並べ替えることができ、数値で並べ替えることもできます。
並べ替えコマンドは、sort
と入力するだけで呼び出すことができます ターミナルで。次に、STDINからの入力を求めるプロンプトが表示されます。 STDINを入力した後、ctrl+d
入力の終わりをマークするために入力されます。
次の出力は、STDINからの入力データがアルファベット順に並べ替えられていることを示しています。
$ sort
cappa
beta
delta
theta
alpha
alpha
beta
cappa
delta
theta
ファイルを並べ替える
デフォルトでは、sortはすべての文字を文字列文字として扱います。数字も文字として扱われます。
まず、並べ替える数値データを含むファイルを作成します。次のコマンドは、数値データを含むファイル'numeric.txt'を作成します。
$ cat > numeric.txt
01
10
25
83
502
111
次に、ファイル'numeric.txt'を次のように並べ替えます。
$ sort numeric.txt
01
10
111
25
502
83
上に示した出力は、私たちが一般的に期待するものではありません。もちろん、111は25より大きく、502も83より大きくなります。しかし、よく見ると、番号は辞書順に並べ替えられています。
たとえば、111と25の場合、最初の文字を比較します。1は2の前にあります。したがって、111は25の前に配置されます。
次に、コンテンツがアルファベットまたは単語の場合にどのようにソートされるかを確認しましょう。次のファイル「wordlist.txt」には、大文字と小文字で始まる単語が含まれており、並べ替えられたリストが表示されます。
$ sort wordlist.txt Aeroplane ant apple bark born Box Cat tom
welcome
並べ替えオプション
並べ替えコマンドには、ファイルの内容を並べ替えるための非常に優れたオプションが付属しています。それらのいくつかについて次のように説明しましょう:
並べ替え-n
:ファイルを数値で並べ替えます。
並べ替え-u
:前のキーを繰り返す行を抑制します。
並べ替え-k
:列番号でテーブルを並べ替えます。
並べ替え-t
SEP:提供されているセパレーターを使用してフィールドを識別します。
並べ替え-M
:指定した暦月に従って並べ替えます。
並べ替え-b
:行頭の空白は無視してください。
並べ替え-r
:逆順で並べ替えます。
並べ替え-o
:新しいファイルに出力します。
ファイルを数値で並べ替える(-nオプション)
ファイル内の内容を数値で並べ替える場合は、-n
を使用します。 オプション。
次の例では、ファイル'numeric.txt'に番号が含まれており、データは番号順に並べ替えられています。
$ sort -n numeric.txt
01
10
25
83
111
502
ファイル内の番号を逆にするには、-nr
の組み合わせを使用します オプション。
例:
$ sort -nr numeric.txt
502
111
83
25
10
01
重複する行を並べ替えて削除する(-uオプション)
ファイルから重複行を並べ替えて削除するには、-u
を使用します オプション。最初のコマンドはcatコマンドを使用してファイルduplicate.txtのコンテンツを一覧表示し、2番目のコマンドは-u
を使用します 重複する行を削除するオプション。
例:
$ cat duplicate.txt
hello
linux
lInux
Linux
raghu
world
zzz
zzz
重複行が削除されていることを確認できる出力例'duplicate.txt'ファイル:
$ sort -u duplicate.txt
hello
linux
lInux
Linux
raghu
world
zzz
ケースを並べ替えて無視する(-fオプション)
他の多くのLinuxおよびUnixツールと同様に、sortコマンドはデフォルトで大文字と小文字を区別します。ただし、大文字と小文字を区別する必要がある場合は、-f
を使用できます。 または--ignore-case
オプション。
たとえば、「duplicate.txt」には、さまざまなケースで「linux」という単語の3つのインスタンスがあります。デフォルトでは、それらはすべて-u
で印刷されます オプション。これは、並べ替えコマンドで一意ではないことを意味します。
ただし、-f
を使用する場合 オプションは、以下に示すように無視されます:
$ sort -f -u duplicate.txt
hello
linux
raghu
world
zzz
列で並べ替え(-kオプション)
sortコマンドは、-k
を使用して列番号を使用して任意のテーブルをソートできます。 オプション。たとえば、「-k3」を使用して、テーブルの3番目の列を並べ替えます。
'population.txt'ファイルに次のような目次があるとします。
$ cat population.txt
Kids 500 India
Youth 400 England
Senior 600 USA
Junior 9000 Australia
Pensioners 650 China
以下では、population.txtファイルの列番号2を使用してテーブルを並べ替えます。
$ sort -k2 population.txt
Youth 400 England
Kids 500 India
Senior 600 USA
Pensioners 650 China
Junior 9000 Australia
複数の列を並べ替える
状況によっては、複数の列を使用してテーブルを並べ替える必要がある場合があります。複数の列のデータを含むファイルの例を見てみましょう。
次のファイル'columns.txt'には、リストされている複数の列が含まれています:
cat columns.txt
version1.2 10 25
version1.2 30 50
version1.1 10 30
version1.1 40 50
version1.2 40 50
version1.1 10 20
version1.1 5 8
次に、コマンドをチェックして、列1、2、3を番号順に並べ替えます。
$ sort -k1,1 -k2,2n -k3,3n columns.txt
version1.1 5 8
version1.1 10 20
version1.1 10 30
version1.1 40 50
version1.2 10 25
version1.2 30 50
version1.2 40 50
列フィールド区切り文字で並べ替え(区切り文字-tオプション)
デフォルトでは、列の区切り文字は空白またはタブです。ただし、-t
を使用してカスタム区切り文字を使用できます または--field-separator
並べ替えのオプション。
例を見てみましょう。区切り文字としてコロン(:)を使用し、並べ替える'/ etc/passwd'ファイルを使用します。
UIDに基づいて/etc/ passwdファイルをソートする場合は、次のコマンドを使用します。
$ sort -n -t ':' -k3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
<---output truncated--->
月ごとに並べ替え(-Mオプション)
-M
を使用する 月で並べ替えることができるオプション。月のあるファイルがある場合は、コマンドの順序を月で並べ替えます。
たとえば、「months.txt」ファイルには月の名前のリストが含まれています。
$ cat months.txt
sep
august
july
dec
feb
may
jan
-Mオプションを使用して、「months.txt」ファイルを月別に並べ替えます。
$ sort -M months.txt
jan
feb
may
july
august
sep
dec
人間が読める形式の数字を並べ替える(-hオプション)
並べ替えでは、-hまたは--human-numeric-sort
を使用して、2K、5G、3Mなどの人間が読める形式の数値を並べ替えることができます。 オプション。
たとえば、以下のファイルリストは人間が読める形式の番号です
$ cat human_numeric.txt
4G
2K
3M
1G
34K
52M
200M
次のコマンドは-h
を使用します 人間が読める形式の数字を比較して並べ替えるオプション。
$ sort -h human_numeric.txt
2K
34K
3M
52M
200M
1G
4G
ソートされた入力を確認します(-cオプション)
sortコマンドは、-c
を使用して、入力がすでにソートされているかどうかを確認できます。 オプション。ソートされていない場合は、ソートされていない最初の行を返します。
$ sort -c /etc/passwd
sort: /etc/passwd:2: disorder: daemon:x:1:1:daemon:/usr/sbin:/bin/sh
ソートされた入力には何も出力されません:
$ sort /etc/passwd | sort -c
$ echo $?
0
他のコマンドで並べ替える
並べ替えはテキスト処理ツールであるため、別のコマンドからの入力をパイプ処理することで使用できます。
次のコマンドでは、sortコマンドの出力をsortの入力として使用します。
$ tail /etc/passwd | sort
altair:x:1001:1001:Altair Ibn La Ahad,,,,:/home/altair:/bin/bash
bind:x:120:132::/var/cache/bind:/bin/false
dnsmasq:x:121:65534:dnsmasq,,,:/var/lib/misc:/bin/false
mysql:x:115:129:MySQL Server,,,:/nonexistent:/bin/false
postfix:x:105:126::/var/spool/postfix:/bin/false
raghu:x:1000:1000:raghu,,,:/home/raghu:/bin/bash
smmsp:x:119:131:Mail Submission Program,,,:/var/lib/sendmail:/bin/false
smmta:x:118:130:Mail Transfer Agent,,,:/var/lib/sendmail:/bin/false
sshd:x:117:65534::/var/run/sshd:/usr/sbin/nologin
statd:x:116:65534::/var/lib/nfs:/bin/false
-rオプションを使用すると、並べ替えを元に戻すことができます。
人間が読める形式のduコマンド出力をサイズで並べ替える別の例を見てみましょう。次のコマンドを使用します。
$ du -h | sort -h
結論
このチュートリアルでは、Linuxの並べ替えとファイルの内容を並べ替えるオプションについて学習します。読んで楽しんでいただければ幸いです。他に例があれば、以下にコメントしてください。