May 13, 2010

ファイルの逆順出力

ファイルを逆順に出力したい事がたまにある。
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 行目の前の行なので先頭行)に移動するので、 結果としてファイルの内容が逆順に表示される。

Edit this entry...

wikieditish message: Ready to edit this entry.
















A quick preview will be rendered here when you click "Preview" button.