Linux sort コマンド:テキストの並べ替え

LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、テキストデータを整理・整列するための強力なユーティリティである Linux の sort コマンドを詳しく見ていきます。あなたは学校の管理者として、sort コマンドのさまざまなオプションを使いこなし、学生情報を効率的に管理・分析するタスクに挑戦します。この実践的な体験を通じて、Linux のコマンドラインツールを使用して、現実世界のシナリオでデータを操作する方法を理解することができます。

学生名の基本的な並べ替え

まずは、学生の名前リストをアルファベット順に並べ替えることから始めましょう。これは、クラスの名簿を作成したり、学生の記録を整理したりする際によく行われる作業です。

最初に、学生リストの内容を確認します。

cat ~/project/students.txt

特定の順序になっていない学生名のリストが表示されるはずです。

David Lee
Alice Johnson
Charlie Brown
Bob Smith
Eve Wilson

次に、sort コマンドを使用して、これらの名前をアルファベット順に並べ替えます。

sort ~/project/students.txt

このコマンドを実行すると、並べ替えられた学生名のリストが画面に表示されます。出力は以下のようになるはずです。

Alice Johnson
Bob Smith
Charlie Brown
David Lee
Eve Wilson

sort コマンドは、デフォルトで各行をアルファベット順に並べ替えます。各行の先頭から 1 文字ずつ比較を行います。そのため、"Alice" が "Bob" よりも前に来ます。

もし出力が表示されなくても、心配しないでください。コマンドは正常に動作しており、結果をターミナルに表示しただけです。並べ替えたリストを新しいファイルに保存したい場合は、次のように出力リダイレクト演算子 > を使用できます:sort ~/project/students.txt > ~/project/sorted_students.txt

学生の年齢による並べ替え

次に、学生を年齢順に並べ替えます。これは、年齢に応じたグループ分けやアクティビティを計画する際に役立ちます。

まず、データを確認しましょう。

cat ~/project/student_ages.txt

次のように、学生の名前と年齢のリストが表示されます。

David Lee:21
Alice Johnson:18
Charlie Brown:19
Bob Smith:20
Eve Wilson:18

このリストを年齢で並べ替えるには、-n オプションを使用します。これにより、sort は数値を文字列としてではなく、数値(Numeric)として扱います。

sort -n -t: -k2 ~/project/student_ages.txt

このコマンドの内容を詳しく説明します。

  • -n: 数値として並べ替え(数値ソート)を行うよう指定します。
  • -t:: フィールドの区切り文字(デリミタ)がコロン(:)であることを指定します。
  • -k2: 2 番目のフィールド(年齢)を並べ替えのキー(Key)として使用するよう指定します。

これにより、学生が若い順に並べ替えられて表示されます。

Alice Johnson:18
Eve Wilson:18
Charlie Brown:19
Bob Smith:20
David Lee:21

-n オプションを指定しない場合、sort は年齢を文字列として扱うため、誤った順序(例えば 18, 19, 20, 21, 3 のような順)になる可能性があります。-n オプションを使うことで、正しい数値順が保証されます。

学生の成績の逆順並べ替え

今度は、学生の成績を降順(大きい順)で並べ替えてみましょう。これは、学生のランキングを作成したり、成績優秀者を特定したりする際によく使われます。

まず、現在のリストを確認します。

cat ~/project/student_grades.txt

以下のような内容が表示されるはずです。

David Lee:87
Alice Johnson:92
Charlie Brown:95
Bob Smith:88
Eve Wilson:91

成績を高い順に並べ替えるには、逆順(Reverse)を意味する -r オプションと、数値ソートの -n オプションを組み合わせて使用します。

sort -nr -t: -k2 ~/project/student_grades.txt

各オプションの役割は以下の通りです。

  • -n: 数値として並べ替えます。
  • -r: 並べ替え順序を逆にします(昇順ではなく降順になります)。
  • -t:: フィールドの区切り文字をコロンに指定します。
  • -k2: 2 番目のフィールド(成績)をキーとして使用します。

このコマンドにより、成績の高い順に学生が表示されます。

Charlie Brown:95
Alice Johnson:92
Eve Wilson:91
Bob Smith:88
David Lee:87

-r オプションは、ランキングの作成、トップパフォーマーの特定、タスクの優先順位付けなど、高い値を先に確認したい多くの実務シナリオで非常に便利です。

複数フィールドによる学生記録の並べ替え

このステップでは、名前、年齢、成績を含む、より複雑な学生記録を並べ替えます。これは、包括的な学生データベースを扱う際によくあるシナリオです。

まず、データを確認しましょう。

cat ~/project/student_records.txt

各行に、コロンで区切られた学生の名前、年齢、成績が含まれています。

David Lee:21:87
Alice Johnson:18:92
Charlie Brown:19:95
Bob Smith:20:88
Eve Wilson:18:91

このファイルを、まず年齢(第 2 フィールド)で並べ替え、年齢が同じ場合は成績(第 3 フィールド)で並べ替えるには、以下のコマンドを使用します。

sort -t: -k2n -k3nr ~/project/student_records.txt

コマンドの各部分の意味は以下の通りです。

  • -t:: フィールドの区切り文字をコロンに指定します。
  • -k2n: 2 番目のフィールド(年齢)に基づいて数値的に並べ替えます。
  • -k3nr: 次に、3 番目のフィールド(成績)に基づいて数値的に逆順(降順)で並べ替えます。

これにより、主に年齢(昇順)で並べ替えられ、年齢が同じ学生の間では成績(降順)でランク付けされた結果が表示されます。

Alice Johnson:18:92
Eve Wilson:18:91
Charlie Brown:19:95
Bob Smith:20:88
David Lee:21:87

このようなマルチキー(複数キー)による並べ替えは、複数の基準に基づいてデータを整理する必要がある場合に非常に役立ちます。この例では、学生を年齢ごとにグループ化し、各年齢グループ内で成績順に並べています。

重複エントリの削除

データ入力のミスや複数回の提出により、学生記録に重複が含まれることがあります。これらの重複を削除する方法を学びましょう。

まず、重複が含まれている可能性のあるファイルを確認します。

cat ~/project/student_clubs.txt

以下のような内容が表示されるかもしれません。

Alice Johnson:Chess Club
Bob Smith:Debate Team
Charlie Brown:Chess Club
David Lee:Science Club
Eve Wilson:Debate Team
Alice Johnson:Chess Club
Bob Smith:Science Club

このリストを並べ替えて重複を削除するには、-u(Unique)オプションを使用します。

sort -u ~/project/student_clubs.txt

このコマンドを実行すると、重複のない、整理された学生のクラブ所属リストが表示されます。

Alice Johnson:Chess Club
Bob Smith:Debate Team
Bob Smith:Science Club
Charlie Brown:Chess Club
David Lee:Science Club
Eve Wilson:Debate Team

-u オプションは、並べ替えの際、同じ内容の行が複数ある場合に最初の 1 行だけを出力します。つまり、並べ替え後に重複行を削除します。これは、一意の(ユニークな)エントリリストを作成したい場合や、冗長なデータを特定して排除したい場合に特に便利です。

なお、"Bob Smith" が 2 回表示されているのは、彼が 2 つの異なるクラブに所属しているためです。行全体の内容が異なるため、これらは重複とはみなされません。

まとめ

この実験では、sort コマンドを使用してさまざまな種類の学生データを整理する方法を学びました。以下の便利なオプションを習得しました。

  • 基本的なアルファベット順の並べ替え
  • -n による数値ソート
  • -r による逆順ソート
  • -k による複数フィールドでの並べ替え
  • -t によるカスタム区切り文字の使用
  • -u による重複の削除

その他の便利な sort オプションには以下のようなものがあります。

  • -f: 大文字と小文字を区別せずに並べ替える(Ignore case)
  • -b: 行頭の空白を無視する
  • -c: 入力がすでに並べ替えられているかチェックする
  • -o: 結果を標準出力ではなくファイルに書き込む

これらのスキルは、教育現場だけでなく、さまざまなプロフェッショナルな場面でデータを管理・分析する際に非常に価値のあるものとなるでしょう。