‘sort’コマンドは、入力テキストファイルの行を印刷し、すべてのファイルをソートされた順序で連結するためのLinuxプログラムです。sortコマンドは空白をフィールドの区切り文字とし、全入力ファイルをソートキーとします。sortコマンドはファイルを実際にはソートしませんが、出力をリダイレクトするまでソートされた出力を印刷するだけです。
この記事では、Linuxの’sort’コマンドについて詳しく解説し、sortコマンドをLinuxでどのように使用するかを示す14の実用的な例を紹介します。
1. 指定された内容でテキストファイルを作成
まず、このタスクの作業ディレクトリである「/home/$USER/Desktop/tecmint」にある、「tecmint.txt」という名前のテキストファイルを作成します。
以下のコマンドでオプション「-e
」を使用してバックスラッシュの解釈を有効にし、「/n
」はechoコマンドに各文字列を新しい行に書き込むよう指示します。
echo -e "computer\nmouse\nLAPTOP\ndata\nRedHat\nlaptop\ndebian\nlaptop" > tecmint.txt
2. ファイルの内容を表示
‘sort‘コマンドを始める前に、ファイルの内容を見て、次のcatコマンドを使用して表示します。
cat tecmint.txt
3. ファイル内容のソート
コマンド「sort tecmint.txt」は、ファイル内の行をアルファベット順に並べ替えるために使用されます。もしある行が重複している場合、それぞれのユニークな行のコピーを1つだけ保持します。
sort tecmint.txt
4. ソートされた出力を新しいファイルにリダイレクト
次のコマンドは、テキストファイル「tecmint.txt」の行をアルファベット順にソートし、その後、ソートされた出力を新しいファイル「sorted.txt」にリダイレクトするために使用されます。つまり、元のファイルは変更されず、ソートされた内容は別のファイルに保存されます。
内容を確認するには、catコマンドを使用してください。
sort tecmint.txt > sorted.txt cat sorted.txt
5. ファイル内容を逆順にソート
次のコマンドは、テキストファイル「tecmint.txt」の行を逆順にソートするために使用されます。つまり、行を降順のアルファベット順に並べ替え、ソートされた出力を新しいファイル「reversesorted.txt」にリダイレクトします。
sort -r tecmint.txt > reversesorted.txt cat reversesorted.txt
6. ファイルとディレクトリのリストを保存
次のコマンドは、ユーザーのホームディレクトリ(“/home/$USER“)の内容を詳細な長い形式で表示するためにlsコマンドを使用し、そしてこのディレクトリリストをユーザーのデスクトップにある“lsl.txt”という名前のテキストファイルにリダイレクトします。具体的には、“tecmint”ディレクトリにあります。
ls -l /home/$USER > /home/$USER/Desktop/tecmint/lsl.txt cat lsl.txt
さて、デフォルトの最初の文字以外のフィールドに基づいてコンテンツをソートする例を探りましょう。
7. 「2番目のフィールドに基づいてファイルの内容をソート」
次のコマンドは、“lsl.txt”ファイルの内容を、各行の2番目のフィールドの値に基づいてソートするために使用されます。'-n'
オプションは、数値ソートを示し、2番目のフィールドを数値ではなくテキストとして扱います。
'-k2'
オプションは、2番目のフィールドをソートの基準としたいことを指定します。このコマンドを実行することで、2番目のフィールドの数値をソート基準とした“lsl.txt”の行のソートされたリストが得られます。
sort -nk2 lsl.txt
8. 「9番目のフィールドに基づいてファイルの内容をソート」
次のコマンドは、“lsl.txt”ファイルの各行を、各行の9番目のフィールドの値に基づいて昇順にソートするために使用されます。'-k9'
オプションは、9番目のフィールドをソートの基準とすることを指定します。
sort -k9 lsl.txt
9. 「ファイルサイズでファイルをソート」
以下のコマンドは、ユーザーのホームディレクトリの内容を長いリスト形式で表示し、その後、ディレクトリリストを'sort -nk5'
にパイプすることで、5列目の値(ファイルサイズを表す)に基づいてリストをソートします。
ls -l /home/$USER | sort -nk5
10. ファイル内の重複行の削除
以下のコマンドは、ファイル“tecmint.txt”の行をアルファベット順に昇順でソートし、'-u'
オプション(“unique”を意味する)を使用して重複行を削除します。これにより、ソートされた出力に固有の行が保持されます。
$ cat tecmint.txt $ sort -u tecmint.txt
これまでのルール(観察されたもの):
- 数字で始まる行は、指定されていない限り(
-r
)、リストで優先され、トップに配置されます。 - 小文字で始まる行は、指定されていない限り(
-r
)、リストで優先され、トップに配置されます。 - 内容は、指定されていない限り(
-r
)、辞書のアルファベットの発生順に基づいてリストされます。 - ソートコマンドは、デフォルトで各行を文字列として扱い、辞書のアルファベットの発生順に基づいてソートします(数値が優先されます; ルール – 1 を参照)。指定がない限り。
11. ディレクトリリストのリダイレクトファイル
以下のコマンドは、ユーザーのホームディレクトリの内容を長い形式でリストアップし、隠しファイルおよびディレクトリも含め、そのディレクトリリストをユーザーのデスクトップ上の「lsla.txt」という名前のテキストファイルにリダイレクトします。このファイルは「tecmint」ディレクトリ内にあります。
ls -lA /home/$USER > /home/$USER/Desktop/tecmint/lsla.txt cat lsla.txt
lsコマンドに慣れている人は、'ls -lA'
が'ls -l'
に隠しファイルを加えたものと同等であることを理解しています。その結果、これら2つのコマンドの内容の大部分は同じになります。
12. ファイルの内容をソートする
以下のコマンドは、2つのテキストファイル「lsl.txt」と「lsla.txt」の内容をアルファベット順に昇順でソートし、その後、ソートされた内容を結合してターミナルに表示します。
$ sort lsl.txt lsla.txt
ファイルやフォルダの繰り返しに注意してください。
13. ファイル内の重複する行を削除する
以下のコマンドは、2つのテキストファイル「lsl.txt」と「lsla.txt」の内容を昇順でソートし、重複する行を削除しながら結合します。'-u'
オプションを使用することで、ソートされた出力において一意の行のみが保持されます。
$ sort -u lsl.txt lsla.txt
出力から重複が省略されていることに注意してください。また、出力を新しいファイルに保存することができます。
14. カスタム区切り文字を使用して複数のフィールドで出力をソートする
次のコマンドは、ユーザーのホームディレクトリの内容を長い形式でリストし、その後、ディレクトリのリストを ‘ls’ と ‘sort’ コマンドを組み合わせて ‘sort’ コマンドにパイプすることによって、出力を特定の列とフィールドに基づいてソートします。
ls -l /home/$USER | sort -t "," -nk2,5 -k9
コマンドの分解は次のとおりです。
-t ","
– コンマ(",")
がフィールド区切り文字として使用されることを指定します。-nk2,5
– 通常、パーミッションと所有権の詳細を表す列 2 から 5 の数値によるソートを示します。-k9
– 第 9 列、つまりファイルサイズに基づいて結果をさらにソートします。
以上です。次の記事では、’sort’ コマンドのより詳細な例について説明します。
引き続き、共有、コメント、いいね、より多くの人々に届けるために協力してください。