ファイルの1行をポップ(読み取りおよび削除)する方法は?

ファイルの1行をポップ(読み取りおよび削除)する方法は?

ファイルの最後の行を取得して削除しようとします。

次の行を読んでください。

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

おすすめ記事