sort

なかださんのツッコミで基本コマンドの man をきちんと読まないとイカンなと思った次第。そういや、あんまり基本コマンド使いこなしてない。awk 使えないし。sed もイマイチ良くわからん。Unix を触り始めた頃には既に PerlRuby が在った第 n 世代の人間には結構多いのでは? 何でも出来ちゃうから。

-t SEPARATOR
各 行からソートキーを検索する際、文字 SEPARATOR をフィールドのセパレーターにする。デフォルトでは、フィールドは空白以外の文字と空白文字の間の空文字列 (empty string) によって分離される。例えば入力行として ` foo bar' が与えられた場合、 sort はこの行をフィールド ` foo' と ` bar' に分離する。フィールドセパレーターは、その前後のフィールドには含まれないものとされる。

これは初めて知った。やってみよう:

$ echo '
1.200.3
1.21.3
' | sort


1.200.3
1.21.3
$ echo '
1.200.3
1.21.3
' | sort -n


1.200.3
1.21.3
$ echo '
1.200.3
1.21.3
' | sort -t. -n


1.200.3
1.21.3

あれ?

$ sort --version
sort (GNU coreutils) 5.3.0
$ sort --version
sort (coreutils) 5.2.1

保留。


-k オプションがあるらしいので追記:
IP アドレスなら、

sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n

で良いみたい。すげぇ。

-n
数値順に評価する。行先頭の文字列 (空白が前置されていても良い) を数 値文字列として比較する。数値文字列は、先頭の - 符号 (なくても良い)、 0 桁以上の数字、そして小数点と 0 桁以上の数字 (なくて も良い) からなる。

これは知ってるから良いとして。

-u
デフォルトの動作と -m オプションの動作では、等しいとされた行のうちの最初のものだけを表示する。 -c オプションの動作では、連続した行で等しいものがないかどうかをチェックする。

uniq 備えてるの知らんかった! と驚くのが2回目な気がする!

-m
与えられたファイル群をまとめてソートしてマージする。入力ファイルは事前にそれぞれソートされていなければならない。マージ動作ではなく、ソート動作を複数ファイルにまとめて行うこともできる。マージ動作が提供されているのは、 (これでよい場合は) こちらの方が高速だからである。

これ便利。使う。忘れない。