web-dev-qa-db-ja.com

組み込みの「ソート」プログラムを使用して、2つのフィールド(1つは数値、1つは文字列)で同時にソートするにはどうすればよいですか?

次の形式の表形式のデータを含むファイル、たとえば「bigfile」があります。

a1 b2 a3 1
b1 a2 c3 0
... 等々。

Linuxマシンに組み込まれている「ソート」プログラムを使用したいので、このファイルを4番目のフィールド(数値)でソートし、次に最初のフィールドで同時にソートします。私はmanページを数回調べましたが、思いついたのは、

sort -n -k4,4 -k1,1 bigfile

「ソート」に自分のやりたいことをさせる方法はありますか、それとも独自のカスタムプログラムを作成する必要がありますか?

ありがとうございました。

16
Vijay

マンページから:

POSはF [.C] [OPTS]です。ここで、Fはフィールド番号、Cはフィールド内の文字位置です。どちらもオリジン1です。-tも-bも有効になっていない場合、フィールド内の文字は前の空白の先頭からカウントされます。 OPTSは、1つ以上の単一文字の順序付けオプションであり、そのキーのグローバル順序付けオプションをオーバーライドします。キーが指定されていない場合は、行全体をキーとして使用します。

sort -k4,4n -k1,1 bigfileそれをするべきです。

別のオプションはsort -k1,1 bigfile | sort --stable -n -k4,4安定ソートとは、4番目のフィールドのタイが初期位置によって解決されることを意味します。初期位置は、ソートの最初のパスによって最初のフィールドに設定されます。

30
wnoise