それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

数字としてソートする sort -g

sortコマンドで先頭文字を数字として解釈しソートするには

cat test |sort -g | more

UNIXの通常のソートなら、残念な結果になる。

次のファイル test

1
3
4
7
8
9
10
2
5
6

sort でソートすると残念な結果に

cat test | sort 
1
10
2
3
4
5
6
7
8
9

辞書式に並んでしまう。ムッキー

数字で評価する -g オプション

それでもオプションをつければ大丈夫!

cat test2 | sort -g
1
2
3
4
5
6
7
8
9
10

ちゃんと、数字順に並んだね。

小さい処理を組み合わせて使うのがUNIX

UNIXといえば、小さいコマンドを組合わせて使いこなす。
こういうちょっとした事も、コマンドにしてるととても便利。

sort コマンドだと、 2カラム目が数字だったら対応できないので、ちょととアレンジ。

msort

#!/usr/bin/env ruby
# coding : utf-8
$KCODE='u'
cols = []
while line = gets
	cols << line.split
end


retry_count = 0
begin
	raise unless cols.first[0] =~ /\d+/
	break if retry_count == cols.size
	cols.sort{|a,b| a[0].to_i <=> b[0].to_i }.each{|e| puts e.join("\t")}
rescue => e
	#一列目と2列目を入れ替える
	cols.map{|e| tmp = e.shift; e.push tmp}
	retry_count = retry_count +1
	retry
end

mcmd の実装に似たようなものがあったのでRubyで仮実装してみたり。