我需要使用bash脚本从一个巨大的文本文件中反复删除第一行。
现在我正在使用sed - I -e "1d" $FILE -但它需要大约一分钟的时间来删除。
有没有更有效的方法来实现这个目标?
我需要使用bash脚本从一个巨大的文本文件中反复删除第一行。
现在我正在使用sed - I -e "1d" $FILE -但它需要大约一分钟的时间来删除。
有没有更有效的方法来实现这个目标?
当前回答
应该显示除第一行以外的其他行:
cat textfile.txt | tail -n +2
其他回答
这一行代码可以做到:
echo "$(tail -n +2 "$FILE")" > "$FILE"
它可以工作,因为tail在echo之前执行,然后文件被解锁,因此不需要临时文件。
海绵util避免了对临时文件的杂耍:
tail -n +2 "$FILE" | sponge "$FILE"
你可以编辑文件:使用perl的-i标志,像这样:
perl -ni -e 'print unless $. == 1' filename.txt
这将使第一行消失。Perl将需要读取和复制整个文件,但是它会将输出保存在原始文件的名称下。
使用split怎么样?
man csplit
csplit -k file 1 '{1}'
可以使用vim这样做:
vim -u NONE +'1d' +'wq!' /tmp/test.txt
这应该更快,因为vim在处理时不会读取整个文件。