忘れないようにメモっとく

機械学習とかプログラミングとか。

sort - Unixコマンド。ヘッダー以外の行でソートする。

(head -n +1 sample.txt && tail -n +2 sample.txt | sort ) > sorted_sample.txt

headとtailを使えば、中間ファイル無しで書ける。以下はサンプルファイルを使った解説。

例えばこんなファイル。sample.txt

id x y
1 1.3 0.6
2 1.1 0.4
3 1.1 0.6
4 1.7 0.4
5 1.5 0.2
6 1.5 0.9

これをx, yでソートしようとするとき、普通はヘッダー以外の部分でソートしたいですよね。 ヘッダーとデータ部分の切り分けをていねいにやるとしたら

head -n +1 sample.txt
>>>
id x y

で、ヘッダー部分を取り出し、

tail -n +2 sample.txt
>>>
1 1.3 0.6
2 1.1 0.4
3 1.1 0.6
4 1.7 0.4
5 1.5 0.2
6 1.5 0.9

で、データ部分を取り出す。 このデータ部分にsortを使う。

sort -k 2n,3n data.txt
>>>
2 1.1 0.4
3 1.1 0.6
1 1.3 0.6
5 1.5 0.2
6 1.5 0.9
4 1.7 0.4

このソートしたファイルと、最初に切り出したヘッダー部分をくっつければおk。

めんどくさいからまとめましょう。

(head -n +1 sample.txt && tail -n +2 sample.txt | sort -k 2n,3n ) > sorted_sample.txt