2010/05/13
ファイルの逆順出力
ファイルを逆順に出力したい事がたまにある。
FreeBSD の tail (1) には -r オプションがあって
ファイルを行単位で逆順に出力できるが、
これは POSIX.2 にはない拡張仕様なので汎用的ではない。
Linux では tac (1) (多分逆順に出力する cat だから tac)
というコマンドがインストールされている事もあるが、
これも POSIX.2 には存在せず
Linux でも標準ではインストールされていない場合がある。
ファイルの逆順を出力するなら ex (1) を利用して、
$ ex -s ファイル <<-FOF > g/^/mo0 > %p >EOFとするのが汎用的で良いと思う。
簡単に解説すると「行の先頭 (^) を 0 行目に移動(mo0)して、
全行を表示する(%p)」というコマンドを実行している。
行の先頭は全ての行に存在するので全ての行が処理対象になる。
各行を順番に 0 行目(1 行目の前の行なので先頭行)に移動するので、
結果としてファイルの内容が逆順に表示される。