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で仮実装してみたり。