Linux の sort コマンド:テキストのソート

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux の汎用的な sort コマンドを調べます。これは、テキストデータを整理・整列するための強力なユーティリティです。学校管理者として、sort コマンドのさまざまなオプションを使って、効率的に生徒情報を管理・分析します。この実践的な経験は、Linux コマンドラインツールを使って現実世界のシナリオでデータを操作する方法を理解するのに役立ちます。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 初級 レベルの実験の完了率は 98%です。学習者から 100% の好評価を得ています。

生徒名の基本的なソート

まずは、生徒名のリストをアルファベット順にソートしましょう。これは、クラスの出席表を作成したり、生徒記録を整理したりする際の一般的なタスクです。

まず、生徒リストの内容を見てみましょう。

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

このリストを年齢順にソートするには、sort に数値として扱うように指示する -n オプションを使用します。

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

このコマンドを分解してみましょう。

  • -n:このオプションは sort に数値ソートを行うように指示します。
  • -t::これは、フィールドがコロンで区切られていることを指定します。
  • -k2:これは、sort に 2 番目のフィールド(年齢)をソートキーとして使用するように指示します。

これにより、最年少から最年長までソートされた生徒のリストが表示されます。

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

成績を高い順から低い順にソートするには、逆順の -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 オプションを使用します。

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 オプションは、sort に同じ行の最初のもののみを出力するように指示します。言い換えると、ソート後に重複する行を削除します。これは、重複のないエントリのリストを作成する必要がある場合や、冗長なデータを特定して削除しようとしている場合に特に役立ちます。

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

まとめ

この実験では、sort コマンドを使ってさまざまな種類の生徒データを整理する方法を学びました。いくつかの便利なオプションを調べました。

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

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

  • -f:ソート時に大文字小文字を区別しない
  • -b:先頭の空白を無視する
  • -c:入力が既にソートされているかどうかをチェックする
  • -o:標準出力ではなく、ファイルに出力する

これらのスキルは、教育環境に限らず、さまざまな職場のコンテキストでデータを管理および分析する際に非常に役立ちます。