ファイルの最後の行を取得して削除しようとします。
次の行を読んでください。
sed -n '$p' file
# or
tail -n 1 file
次の行を削除してください。
sed -i '$d' file
これがうまくいきましたが、これを行う方法はありますか?単一コマンド?
ベストアンサー1
一般のコメントが何であれ、ファイルの最後の行を切り取るには、毎回ファイル全体を読む必要があります。無音、単一のプロセス/コマンドで実行されるか、2〜3つのプロセス/コマンドで実行されるか。
sed -i
とは異なり、tail
ファイルの最後の行を決定するために最初からファイルを読み取らないほどスマートです。また、Linuxには、O(1)時間以内に大きなファイルの終わりを「ポップ」できるtruncate(1)
ユーティリティがあります。tail
# usage popline file [line_count, 1 by default]
popline()(LC_CTYPE=C; l=`tail -n "${2:-1}" "$1"; echo t`; l=${l%t}; truncate -s "-${#l}" "$1"; printf %s "$l")
$ wc -l /tmp/foo
3579500 /tmp/foo
$ cp /tmp/foo /tmp/foo1 && time sed -i '$d' /tmp/foo1
real 0m1.077s
user 0m0.457s
sys 0m0.156s
$ cp /tmp/foo /tmp/foo1 && time popline /tmp/foo1
*/
real 0m0.052s
user 0m0.002s
sys 0m0.003s