sort
なかださんのツッコミで基本コマンドの man をきちんと読まないとイカンなと思った次第。そういや、あんまり基本コマンド使いこなしてない。awk 使えないし。sed もイマイチ良くわからん。Unix を触り始めた頃には既に Perl や Ruby が在った第 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
- 与えられたファイル群をまとめてソートしてマージする。入力ファイルは事前にそれぞれソートされていなければならない。マージ動作ではなく、ソート動作を複数ファイルにまとめて行うこともできる。マージ動作が提供されているのは、 (これでよい場合は) こちらの方が高速だからである。
これ便利。使う。忘れない。