Linux テキストソート

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

はじめに

テキストのソートは、Linux 環境でデータを効果的に管理および分析するために必要なスキルです。テキストファイルを特定の順序で整理する機能は、ログ、設定ファイル、またはテキストベースのデータセットを扱う際に生産性を大幅に向上させることができます。Linux には、データの並べ替え方法をカスタマイズするための多数のオプションを提供する強力な sort コマンドが用意されています。

この実験では、Linux の sort コマンドを使用してテキストデータをさまざまな方法で整理する方法を学びます。ファイルをアルファベット順、数値順、および特定のフィールドでソートする方法を理解します。これらの基本的なスキルは、Linux 環境でデータ処理やシステム管理を行う人にとって非常に価値があります。

この実験の終了時には、さまざまな種類のテキストデータを効率的にソートし、これらのスキルを独自のプロジェクトやワークフローに適用できるようになります。

sort コマンドを使用した基本的なテキストソート

Linux の sort コマンドは、テキストファイルの行を特定の順序で並べるために使用されます。デフォルトでは、ファイルをアルファベット順にソートしますが、ソートの動作をカスタマイズするための多くのオプションを提供しています。

まずは、ソートの練習に使用する簡単なテキストファイルを作成しましょう。プログラミング言語のリストが含まれたファイルを作成します。

  1. まず、プロジェクトディレクトリに移動します。
cd ~/project
  1. 次のコマンドを使用して、languages.txt という名前の新しいファイルを作成します。
echo -e "Python\nJava\nRuby\nGo\nJavaScript\nPHP\nRust\nC++\nSwift\nKotlin" > languages.txt

このコマンドは、10 のプログラミング言語名がそれぞれ別の行に記載されたファイルを作成します。

  1. 作成したばかりのファイルの内容を表示します。
cat languages.txt

以下の出力が表示されるはずです。

Python
Java
Ruby
Go
JavaScript
PHP
Rust
C++
Swift
Kotlin
  1. 次に、sort コマンドを使用してこのファイルをアルファベット順にソートしましょう。
sort languages.txt

出力は次のようになるはずです。

C++
Go
Java
JavaScript
Kotlin
PHP
Python
Ruby
Rust
Swift

行がアルファベット順に並べられていることに注目してください。sort コマンドは入力からすべての行を読み取り、それらをソートし、結果を標準出力に出力します。元のファイルは変更されません。

  1. ソートされた出力を新しいファイルに保存したい場合は、出力リダイレクトを使用できます。
sort languages.txt > sorted_languages.txt
  1. 新しいファイルの内容を確認します。
cat sorted_languages.txt

前と同じソートされた出力が表示されるはずです。

sort コマンドには、ソート順を逆にする -r オプションもあります。試してみましょう。

sort -r languages.txt

出力は逆アルファベット順になります。

Swift
Rust
Ruby
Python
PHP
Kotlin
JavaScript
Java
Go
C++

これで、sort コマンドのアルファベット順ソートの基本的な使い方を学びました。

数値ソートとフィールド区切り文字

多くの実際のシナリオでは、数値や複数のフィールドを持つデータが含まれたファイルをソートする必要がある場合があります。sort コマンドはこれらのシナリオに対応するオプションを提供しています。

数値ソート

数値ソートを試すために、数値が含まれたファイルを作成しましょう。

  1. numbers.txt という名前のファイルを作成します。
cd ~/project
echo -e "10\n5\n100\n20\n1\n50" > numbers.txt
  1. ファイルの内容を表示します。
cat numbers.txt

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

10
5
100
20
1
50
  1. このファイルに基本的な sort コマンドを適用すると、
sort numbers.txt

出力は次のようになります。

1
10
100
20
5
50

これは正しい数値順ではありません。sort はデフォルトで各行をテキストとして扱うため、辞書順では文字列 "100" が "20" の前に来ます。

  1. 数値順にソートするには、-n オプションを使用します。
sort -n numbers.txt

これで正しい数値順が表示されます。

1
5
10
20
50
100

複数フィールドを持つファイルのソート

多くの場合、ファイルにはカンマ、タブ、またはスペースなどの区切り文字で区切られた複数のフィールドが含まれています。sort コマンドを使うと、どのフィールドでソートするかを指定できます。

  1. サンプルデータを含む CSV(Comma-Separated Values、カンマ区切り値)ファイルを作成します。
cd ~/project
echo -e "Name,Age,City\nAlice,28,New York\nBob,35,Los Angeles\nCarol,22,Chicago\nDavid,31,Boston\nEve,26,Seattle" > people.csv
  1. ファイルの内容を表示します。
cat people.csv

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

Name,Age,City
Alice,28,New York
Bob,35,Los Angeles
Carol,22,Chicago
David,31,Boston
Eve,26,Seattle
  1. このファイルを 2 番目のフィールド(年齢)でソートするには、-t オプションでフィールド区切り文字(この場合はカンマ)を指定し、-k オプションでフィールド番号を指定します。
sort -t, -k2,2n people.csv

-t, オプションはフィールド区切り文字をカンマに設定し、-k2,2nsort に 2 番目のフィールドをソートに使用し、それを数値として扱うよう指示します。

出力は次のようになるはずです。

Name,Age,City
Carol,22,Chicago
Eve,26,Seattle
Alice,28,New York
David,31,Boston
Bob,35,Los Angeles
  1. 3 番目のフィールド(都市名)でアルファベット順にソートすることもできます。
sort -t, -k3,3 people.csv

出力は次のようになります。

Name,Age,City
David,31,Boston
Carol,22,Chicago
Bob,35,Los Angeles
Alice,28,New York
Eve,26,Seattle

これらのオプションを使うことで、さまざまなデータ形式のファイルを必要に応じて効果的にソートできます。

高度なソート技術

このステップでは、sort コマンドのいくつかの高度な機能を探索します。これらの機能は、より複雑なソート要件を処理するのに役立ちます。

重複行の削除

時には、データに削除したい重複行が含まれていることがあります。sort コマンドは、一意の行のみを出力する -u オプションを提供しています。

  1. いくつかの重複エントリを含むファイルを作成します。
cd ~/project
echo -e "apple\nbanana\napple\ncherry\nbanana\ndates" > fruits.txt
  1. ファイルの内容を表示します。
cat fruits.txt

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

apple
banana
apple
cherry
banana
dates
  1. -u オプションを使用してソートし、重複行を削除します。
sort -u fruits.txt

出力は次のようになります。

apple
banana
cherry
dates

大文字小文字を区別しないソート

デフォルトでは、sort は大文字小文字を区別します。つまり、"Apple" と "apple" は異なるものとして扱われます。ソート時に大文字小文字を無視したい場合は、-f オプションを使用します。

  1. 大文字小文字が混在したエントリを含むファイルを作成します。
cd ~/project
echo -e "apple\nBanana\nApple\ncherry\nBanana\nDates" > mixed_case.txt
  1. ファイルの内容を表示します。
cat mixed_case.txt

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

apple
Banana
Apple
cherry
Banana
Dates
  1. 大文字小文字を区別してファイルをソートします(デフォルト)。
sort mixed_case.txt

出力は次のようになります。

Apple
Banana
Banana
Dates
apple
cherry

ASCII ソート順では、大文字が小文字の前に来ることに注意してください。

  1. 次に、大文字小文字を無視してファイルをソートします。
sort -f mixed_case.txt

出力は次のようになります。

apple
Apple
Banana
Banana
cherry
Dates

ソートの目的で "apple" と "Apple" が同じものとして扱われていることに注目してください。

月順でのソート

sort コマンドは、-M オプションを使用して月名に基づいてソートすることもできます。

  1. 月名を含むファイルを作成します。
cd ~/project
echo -e "December\nFebruary\nJanuary\nMarch\nNovember\nApril" > months.txt
  1. 月を暦順にソートします。
sort -M months.txt

出力は次のようになります。

January
February
March
April
November
December

ファイルがすでにソートされているかどうかの確認

-c オプションを使用すると、実際にソートすることなく、ファイルがすでにソートされているかどうかを確認できます。

sort -c sorted_languages.txt

ファイルがすでにソートされている場合、出力はありません。ソートされていない場合、最初の順序が正しくない行を示すエラーメッセージが表示されます。

ソートされていないファイルで試してみましょう。

sort -c languages.txt

次のようなエラーメッセージが表示されるはずです。

sort: languages.txt:2: disorder: Java

これらの高度なソート技術を使うことで、データの整理と処理に対する制御が強化されます。

まとめ

この実験では、Linux の sort コマンドを使用して、テキストデータを効果的に整理および管理する方法を学びました。さまざまなタイプのデータに適用できるさまざまなソート技術とオプションを探索しました。

この実験でカバーされた主要な概念は以下の通りです。

  1. sort コマンドを使用した基本的なアルファベット順ソート
  2. リダイレクトを使用してソートされた出力を新しいファイルに保存する方法
  3. -r オプションを使用した逆順ソート
  4. -n オプションを使用した数値ソート
  5. -t および -k オプションを使用した複数フィールドを持つファイルのソート
  6. -u オプションを使用した重複エントリの削除
  7. -f オプションを使用した大文字小文字を区別しないソート
  8. -M オプションを使用した月ベースのソート
  9. -c オプションを使用してファイルがすでにソートされているかどうかを確認する方法

これらのソート技術は、Linux 環境でテキストデータを扱う人にとって基本的なスキルです。これらは、以下のようなさまざまな実際のシナリオに適用できます。

  • ログファイルの分析
  • CSV データの処理
  • 設定ファイルの整理
  • さらなる分析または処理のためのデータの準備

これらのソート技術を習得することで、テキストデータをより効率的に扱うための貴重なツールが、あなたの Linux コマンドラインツールキットに加わりました。