1. 概要

テキストの行の並べ替えは、Linuxでは一般的なタスクです。 このチュートリアルでは、 sort コマンドを使用して、ターミナルに配置されているファイルの行を並べ替える複数の方法を学習します。

2. sortコマンドの概要

sort コマンドは、標準入力(stdin)またはテキストファイルから行を再配置するのに役立ちます。  sortコマンドは、ソートされた結果を標準出力(stdout)に書き込みます。 GNU coreutils パッケージの一部であるため、すべてのLinuxディストリビューションで使用できます。

sortコマンドを使用する構文は簡単です。

sort [OPTION]... [FILE]...

並べ替えユーティリティはデフォルトで行をアルファベット順に並べ替えます

$ cat cities.txt
New York City
Paris
Beijing
Hamburg
Los Angeles
Amsterdam

$ sort cities.txt
Amsterdam
Beijing
Hamburg
Los Angeles
New York City
Paris

ただし、さまざまなオプションを渡すと、 sort コマンドは、行を番号、逆順、フィールドなどで並べ替えるなど、それ以上のことを実行できます。

sort コマンドを使用して、さまざまな方法でファイルを所定の位置に並べ替える方法を学ぶために、いくつかの例を見ていきます。

3. sortコマンドを使用したインプレースソート

sortファイルを使用する場合 コマンドを実行すると、ファイルはその内容をソートされた方法で表示します。

どんな種類の出力も取得しませんが、ソートされたファイルを取得します。

ターミナルでファイルを並べ替える方法を見てみましょう。

3.1. sortでリダイレクトを使用して並べ替える

ソートコマンドの標準出力ストリームであるSTDOUTを見てみましょう。 このストリームからのすべての出力は、通常、ターミナルウィンドウに送信されます。

$ sort cities.txt
Amsterdam
Beijing
Hamburg
Los Angeles
NewYork City
Paris

>演算子を使用して、sortコマンドから一時ファイルに出力を送信できます。

$ sort cities.txt > cities_sorted.txt

次に、 mv コマンドを発行して、名前をcitys.txtに戻すことができます。

$ mv cities_sorted.txt cities.txt

また、これら2つの行を1行にまとめることもできます。

$ sort cities.txt > cities_sorted.txt && mv cities_sorted.txt cities.txt

それでおしまい。

よくある間違いは、出力を同じ入力ファイルにリダイレクトしようとすることです(ファイルの並べ替え>ファイルのように)。 sort プログラムではなくシェルがリダイレクトを行っているため、これは機能しません。入力ファイル(出力でもある)は、sortを与える直前に消去されます。それを読む機会をプログラムします。

3.2. sortオプションを使用した並べ替え

もう1つの方法は、 -oFILEオプションをsortコマンドに渡して、結果をstdoutではなくファイルに書き込むことです。

$ sort -o cities.txt cities.txt

これにより、入力ファイルcitys.txtが同じファイルのソートされた内容で上書きされます。 出力を指定するために使用される-oフラグ、はPOSIX によって定義されるため、sortのすべてのバージョンで使用可能である必要があります。

指定された出力ファイルは、入力ファイルの1つと同じにすることができます。 機能的には、出力をファイルにリダイレクトするようなものです。

bash braceExpansionでファイル名を繰り返さないようにすることもできます。

$ sort -o cities{,}

3.3. コマンド置換を使用した並べ替え

前に説明したように、出力を入力ファイルに直接リダイレクトすることはできません。 ただし、最初に sort コマンドを評価してから、元のファイルにリダイレクトすることができます。 このようにして、インプレースソートを実装できます。

$ echo "$(sort cities.txt)" > cities.txt

4. 結論

sort コマンドは、便利でわかりやすいコマンドラインユーティリティです。 この記事では、 sort コマンドを使用して、例を使用してファイルを所定の位置に並べ替える方法をいくつか学びました。

-o オプションを使用したキーによる並べ替えは、ファイルのインプレース並べ替えを実現するための最良の方法です。 これにより、フィールドベースのデータをより柔軟に並べ替えることができます。

コマンドラインアーセナルにあるこの便利なツールを使用すると、ほとんどの並べ替えの問題を簡単に解決できます。