我有一个非常大的(每个GB几个)文本文件组。 我需要在每个文件的开头添加两行。
我试着用下面的命令使用sed
sed -i '1iFirstLine' sed -i '2iSecondLine'
sed的问题是它遍历整个文件,即使在开始时只需要添加两行,因此需要很多时间。
有没有另一种方式更有效地做到这一点,而不读整个文件?
你应该试试
echo "1iFirstLine" > newfile.txt echo "2iSecondLine" >> newfile.txt cat oldfile.txt >> newfile.txt mv newfile.txt oldfile.txt
这一个是完美的工作,它也非常快。
perl -pi -e '$.=0 if eof;print "first line\nsecond line\n" if ($.==1)' *.txt
如果没有文件重写,添加在开始处是不可能的(与追加到最后相反)。 你不能“转移”文件内容,因为没有文件系统支持。 所以你应该这样做:
echo -e "line 1\nLine2" > tmp.txt cat tmp2.txt oldbigfile.txt > newbigfile.txt rm oldbigfile.txt mv newbigfile.txt oldbigfile.txt
请注意,您需要足够的磁盘空间来保存两个文件一段时间。