[Linux] sortコマンドの使い方 – テキストファイルの行の並び替え

sortコマンドは、テキストファイルの行をアルファベット順や数値順に並び替えるために使用されます。

基本的な使い方は、sort ファイル名で、指定したファイルの内容を標準出力に並び替えて表示します。

オプションとして、-nで数値順、-rで逆順、-kで特定の列を基準に並び替えることができます。

例えば、sort -n -r ファイル名は数値を降順で並び替えます。

この記事でわかること
  • sortコマンドの基本的な使い方
  • 並び替えの基準と順序
  • 各種オプションの活用法
  • 応用例による実践的な使い方

目次から探す

sortコマンドとは

sortコマンドは、LinuxやUnix系のオペレーティングシステムで使用される非常に便利なコマンドの一つです。

このコマンドは、テキストファイルの行を特定の基準に従って並び替えるために使用されます。

例えば、アルファベット順や数値順、さらには特定の列を基準にした並び替えが可能です。

sortコマンドは、データの整理や分析を行う際に非常に役立ちます。

特に、大量のデータを扱う場合や、特定の条件に基づいてデータを抽出したい場合に、その効果を発揮します。

また、sortコマンドは、他のコマンドと組み合わせて使用することもでき、パイプラインを通じてデータ処理の効率を高めることができます。

これにより、シェルスクリプトやコマンドラインでの作業がよりスムーズになります。

基本的な使い方

ファイルの内容を並び替える

sortコマンドを使用して、テキストファイルの内容を並び替える基本的な方法は非常にシンプルです。

以下のコマンドを実行することで、指定したファイルの行をアルファベット順に並び替えた結果を表示できます。

sort filename.txt

このコマンドを実行すると、filename.txtの内容がアルファベット順に並び替えられ、標準出力に表示されます。

標準入力からの並び替え

sortコマンドは、ファイルだけでなく標準入力からもデータを受け取ることができます。

例えば、以下のようにechoコマンドとパイプを使って、直接文字列を並び替えることができます。

echo -e "banana\napple\norange" | sort

このコマンドを実行すると、次のように並び替えられた結果が表示されます。

apple
banana
orange

並び替え結果をファイルに保存する

並び替えた結果を新しいファイルに保存したい場合は、リダイレクトを使用します。

以下のコマンドは、filename.txtの内容を並び替え、その結果をsorted.txtという新しいファイルに保存します。

sort filename.txt > sorted.txt

このコマンドを実行すると、sorted.txtに並び替えた結果が書き込まれます。

これにより、元のファイルを保持しつつ、並び替えたデータを別のファイルに保存することができます。

並び替えの基準

アルファベット順で並び替える

sortコマンドは、デフォルトでアルファベット順に並び替えを行います。

例えば、以下のコマンドを実行すると、fruits.txtに含まれる果物の名前がアルファベット順に並び替えられます。

sort fruits.txt

このコマンドを実行すると、次のような結果が得られます。

apple
banana
grape
orange

数値順で並び替える

数値を含むデータを並び替える場合、-nオプションを使用します。

このオプションを指定することで、数値としての大小関係に基づいて並び替えが行われます。

以下のコマンドは、numbers.txtに含まれる数値を数値順に並び替えます。

sort -n numbers.txt

例えば、numbers.txtが次のような内容の場合、

10
2
33
4

このコマンドを実行すると、次のように並び替えられます。

2
4
10
33

大文字と小文字を区別しない並び替え

大文字と小文字を区別せずに並び替えたい場合は、-fオプションを使用します。

このオプションを指定すると、Fruits.txtの内容が大文字小文字を無視して並び替えられます。

sort -f Fruits.txt

例えば、Fruits.txtが次のような内容の場合、

banana
Apple
orange
Grape

このコマンドを実行すると、次のように並び替えられます。

Apple
banana
Grape
orange

特定の列を基準に並び替える

sortコマンドでは、特定の列を基準にして並び替えることも可能です。

-kオプションを使用することで、指定した列に基づいて並び替えを行います。

以下の例では、data.txtの2列目を基準に並び替えます。

sort -k 2 data.txt

例えば、data.txtが次のような内容の場合、

John 25
Alice 30
Bob 20

このコマンドを実行すると、次のように2列目の数値に基づいて並び替えられます。

Bob 20
John 25
Alice 30

並び替えの順序

昇順で並び替える

sortコマンドは、デフォルトで昇順に並び替えを行います。

昇順とは、アルファベットや数値が小さいものから大きいものへと並ぶ順序のことです。

例えば、names.txtというファイルに名前が含まれている場合、以下のコマンドを実行すると、名前が昇順に並び替えられます。

sort names.txt

このコマンドを実行すると、次のような結果が得られます。

Alice
Bob
Charlie
David

降順で並び替える

降順で並び替えたい場合は、-rオプションを使用します。

このオプションを指定することで、逆の順序で並び替えが行われます。

以下のコマンドは、numbers.txtに含まれる数値を降順に並び替えます。

sort -r numbers.txt

例えば、numbers.txtが次のような内容の場合、

10
2
33
4

このコマンドを実行すると、次のように降順に並び替えられます。

33
10
4
2

複数のキーで並び替える

複数のキーを使用して並び替えることも可能です。

-kオプションを複数回指定することで、優先順位を持たせた並び替えができます。

以下の例では、data.txtの1列目を基準に昇順、次に2列目を基準に昇順で並び替えます。

sort -k 1,1 -k 2,2 data.txt

例えば、data.txtが次のような内容の場合、

John 25
Alice 30
Bob 20
Alice 25

このコマンドを実行すると、次のように1列目の名前で昇順に並び替えられ、同じ名前の行は2列目の数値で昇順に並び替えられます。

Alice 25
Alice 30
Bob 20
John 25

このように、複数のキーを使うことで、より細かい条件での並び替えが可能になります。

オプションの活用

-nオプション:数値順で並び替える

-nオプションを使用すると、数値としての大小関係に基づいて並び替えが行われます。

これにより、数値が含まれるデータを正しく並び替えることができます。

以下のコマンドは、numbers.txtに含まれる数値を数値順に並び替えます。

sort -n numbers.txt

例えば、numbers.txtが次のような内容の場合、

10
2
33
4

このコマンドを実行すると、次のように並び替えられます。

2
4
10
33

-rオプション:逆順で並び替える

-rオプションを使用すると、並び替えの順序が逆になります。

これにより、降順での並び替えが可能です。

以下のコマンドは、fruits.txtに含まれる果物の名前を逆順に並び替えます。

sort -r fruits.txt

例えば、fruits.txtが次のような内容の場合、

banana
apple
orange
grape

このコマンドを実行すると、次のように降順に並び替えられます。

orange
grape
banana
apple

-kオプション:特定の列を基準に並び替える

-kオプションを使用することで、特定の列を基準にして並び替えることができます。

以下のコマンドは、data.txtの2列目を基準に並び替えます。

sort -k 2 data.txt

例えば、data.txtが次のような内容の場合、

John 25
Alice 30
Bob 20

このコマンドを実行すると、次のように2列目の数値に基づいて並び替えられます。

Bob 20
John 25
Alice 30

-fオプション:大文字小文字を無視して並び替える

-fオプションを使用すると、大文字と小文字を区別せずに並び替えが行われます。

これにより、異なるケースの文字列を同じように扱うことができます。

以下のコマンドは、Fruits.txtの内容を大文字小文字を無視して並び替えます。

sort -f Fruits.txt

例えば、Fruits.txtが次のような内容の場合、

banana
Apple
orange
Grape

このコマンドを実行すると、次のように並び替えられます。

Apple
banana
Grape
orange

-uオプション:重複行を無視して並び替える

-uオプションを使用すると、重複する行を無視して並び替えを行います。

このオプションを指定することで、ユニークな行だけを取得することができます。

以下のコマンドは、data.txtの重複行を無視して並び替えます。

sort -u data.txt

例えば、data.txtが次のような内容の場合、

apple
banana
apple
orange

このコマンドを実行すると、次のように重複行が削除されて並び替えられます。

apple
banana
orange

-tオプション:区切り文字を指定して並び替える

-tオプションを使用すると、特定の区切り文字を指定して並び替えを行うことができます。

これにより、カンマやタブなどの区切り文字を持つデータを正しく処理できます。

以下のコマンドは、カンマ区切りのdata.csvを並び替えます。

sort -t ',' -k 2 data.csv

例えば、data.csvが次のような内容の場合、

John,25
Alice,30
Bob,20

このコマンドを実行すると、2列目の数値に基づいて並び替えられます。

Bob,20
John,25
Alice,30

このように、-tオプションを使うことで、特定の区切り文字に基づいた柔軟な並び替えが可能になります。

応用例

複数ファイルを同時に並び替える

sortコマンドは、複数のファイルを同時に並び替えることができます。

複数のファイルを指定すると、全てのファイルの内容が結合され、並び替えられます。

以下のコマンドは、file1.txtfile2.txtを同時に並び替えます。

sort file1.txt file2.txt

このコマンドを実行すると、両方のファイルの内容がアルファベット順に並び替えられ、標準出力に表示されます。

重複行を削除して並び替える

重複行を削除しながら並び替えを行いたい場合は、-uオプションを使用します。

以下のコマンドは、data.txtの重複行を削除し、並び替えます。

sort -u data.txt

例えば、data.txtが次のような内容の場合、

apple
banana
apple
orange

このコマンドを実行すると、次のように重複行が削除されて並び替えられます。

apple
banana
orange

特定の範囲の行を並び替える

特定の範囲の行を並び替えたい場合は、headtailコマンドと組み合わせて使用します。

以下の例では、data.txtの最初の5行を並び替えます。

head -n 5 data.txt | sort

このコマンドを実行すると、data.txtの最初の5行がアルファベット順に並び替えられます。

並び替え結果を別のコマンドに渡す

sortコマンドの結果を別のコマンドに渡すことも可能です。

パイプを使用して、並び替えた結果をwcコマンドで行数をカウントすることができます。

以下のコマンドは、data.txtを並び替え、その行数をカウントします。

sort data.txt | wc -l

このコマンドを実行すると、data.txtの並び替えた結果の行数が表示されます。

並び替え結果を一時ファイルに保存する

並び替えた結果を一時ファイルに保存したい場合は、リダイレクトを使用します。

以下のコマンドは、data.txtを並び替え、その結果をtemp_sorted.txtという一時ファイルに保存します。

sort data.txt > temp_sorted.txt

このコマンドを実行すると、temp_sorted.txtに並び替えた結果が書き込まれます。

これにより、後で結果を確認したり、他の処理に利用したりすることができます。

よくある質問

sortコマンドで数値が正しく並び替えられないのはなぜ?

sortコマンドで数値が正しく並び替えられない場合、主に以下の理由が考えられます。

  • 数値が文字列として扱われている: デフォルトでは、sortコマンドはアルファベット順に並び替えを行います。

数値を正しく並び替えたい場合は、-nオプションを使用して数値順に並び替える必要があります。

  • 不正なデータ: 数値以外の文字が含まれている場合、正しく並び替えられないことがあります。

データを確認し、数値のみが含まれているか確認してください。

複数の列を基準に並び替えるにはどうすればいい?

複数の列を基準に並び替えるには、-kオプションを複数回指定します。

例えば、data.txtの1列目を基準に昇順、次に2列目を基準に昇順で並び替えたい場合、以下のようにコマンドを実行します。

sort -k 1,1 -k 2,2 data.txt

このコマンドにより、1列目の値で並び替えた後、同じ値の行は2列目の値で並び替えられます。

区切り文字がスペース以外の場合、どうやって並び替える?

区切り文字がスペース以外の場合は、-tオプションを使用して区切り文字を指定します。

例えば、カンマ区切りのファイルを並び替える場合、以下のようにコマンドを実行します。

sort -t ',' -k 2 data.csv

このコマンドでは、カンマを区切り文字として指定し、2列目を基準に並び替えを行います。

これにより、異なる区切り文字を持つデータでも正しく並び替えることができます。

まとめ

この記事では、Linuxのsortコマンドを使用してテキストファイルの行を並び替える方法について詳しく解説しました。

基本的な使い方から、並び替えの基準や順序、オプションの活用法、さらには応用例まで幅広く取り上げています。

これを機に、sortコマンドを活用してデータの整理や分析を行い、効率的な作業を実現してみてください。

  • URLをコピーしました!
目次から探す