Linuxでファイルにデータをソートする方法

前書き

このガイドでは、デリミタ付きファイルと他のコマンドの出力からデータをソートする方法を説明します。

このタスクを実行するために使用するコマンドが「ソート」と呼ばれていることに驚くことはありません。 この記事では、sortコマンドの主要なスイッチがすべて提供されます。

サンプルデータ

ファイル内のデータは、何らかの方法で区切られていればソートすることができます。

例えば、去年のスコットランドプレミアリーグからの最終リーグテーブルをとり、そのデータを "spl"というファイルに保存しましょう。

1つのクラブとそのクラブのデータを各行にカンマで区切って、次のようにデータファイルを作成できます。

チーム 得点 目標 ポイント
ケルト語 93 31 86
アバディーン 62 48 71
ハーツ 59 40 65
セントジョンストン 58 55 56
マザーウェル 47 63 50
ロス郡 55 61 48
インヴァネス 54 48 52
ダンディー 53 57 48
パートディック 41 50 46
ハミルトン 42 63 43
キルマーノック 41 64 36
ダンディー・ユナイテッド 45 70 28

ファイル内のデータを並べ替える方法

そのテーブルから、あなたはセルティックがリーグを獲得し、ダンディー・ユナイテッドが最後に来たことが分かります。 あなたがダンディー・ユナイテッドのファンなら、自分の気持ちを良くしたいかもしれないし、得点でソートすることでこれを行うことができます。

これを行うには、次のコマンドを実行します。

sort -k2 -t、spl

今度は次のようになります:

結果がこの順序になっているのは、列2が目標得点列であり、ソートが最低から最高になるためです。

-kスイッチを使用すると、並べ替える列を選択できます。また、-tスイッチを使用すると、区切り文字を選択できます。

ダンディー・ユナイテッドのファンは、自分自身を本当に幸せにするために、次のコマンドを使用して列4でソートできます。

sort -k4 -t、spl

ダンディー・ユナイテッドがトップで、ケルトは最下位にいる。

もちろん、これはセルティックとダンディーの両方のファンを本当に不幸にさせるでしょう。 物事を正しく置くために、次のスイッチを使って逆の順序で並べ替えることができます:

sort -k4 -t、-r spl

やや奇妙なスイッチでは、ランダムに並べ替えることができ、実際にはデータの列を混乱させるだけです。

次のコマンドを使用してこれを行うことができます:

sort -k4 -t、-R spl

-rスイッチと-Rスイッチを混在させると、実際の問題を引き起こす可能性があります。

sortコマンドは日付を月順に並べ替えることもできます。 次の表を見てください:

使用されたデータ
1月 4G
2月 3000K
行進 6000K
4月 100M
5月 5000M
六月 200K
7月 4000K
8月 2500K
9月 3000K
10月 1000K
11月 3G
12月 2G

上記の表は、年の月とモバイルデバイスで使用されるデータの量を表しています。

次のコマンドを使用して日付をアルファベット順に並べ替えることができます。

sort -k1 -t、datausedlist

また、次のコマンドを使用して月単位でソートすることもできます。

sort -k1 -t、-M datausedlist

明らかに上記の表は既に月順に表示されていますが、リストにランダムに入力されていれば、単純なソート方法になります。

2番目の列を見ると、すべての値が人間が判読可能な形式で表示され、並べ替えが簡単ではないように見えますが、sortコマンドは次のコマンドを使用して、

sort -k2 -t、-h datausedlist

他のコマンドから渡されたデータをソートする方法

ファイル内のデータのソートは便利ですが、sortコマンドを使用して他のコマンドの出力をソートすることもできます:

たとえば、lsコマンドを見てみましょう。

ls -lt

上記のコマンドは、各ファイルを1行のデータとして返し、次のフィールドを列に表示します。

次のコマンドを実行して、ファイルサイズでリストを並べ替えることができます。

ls -lt | ソート-k5

結果を逆の順序で取得するには、次のコマンドを使用します。

ls -lt | sort -k5 -r

sortコマンドは、システム上で実行中のプロセスを一覧表示するpsコマンドと組み合わせて使用​​することもできます。

たとえば、システムで次のpsコマンドを実行します。

ps -eF

上記のコマンドは、システム上で現在実行されているプロセスに関する多くの情報を返します。

これらの列の1つはサイズであり、どのプロセスが最大であるかを知りたい場合があります。

このデータをサイズ別にソートするには、次のコマンドを使用します。

ps -eF | ソート-k5

概要

sortコマンドにはそれほど多くはありませんが、他のコマンドからの出力を意味のある順序に並べ替えるとき、特にコマンドに独自の並べ替えスイッチがないときは非常に便利です。

詳細については、sortコマンドのマニュアルページを参照してください。