我有一组非常大的文本文件(每个文件有几个GB)。我需要在每个文件的开头添加两行。我尝试使用sed和以下命令
sed -i '1iFirstLine' sed -i '2iSecondLine'
字符串sed的问题是它循环遍历整个文件,即使在开始时只添加两行,因此需要花费大量时间。有没有一种更有效的替代方法,而不需要阅读整个文件?
aydmsdu91#
你应该试
echo "1iFirstLine" > newfile.txt echo "2iSecondLine" >> newfile.txt cat oldfile.txt >> newfile.txt mv newfile.txt oldfile.txt
字符串
q5iwbnjs2#
这一个是完美的工作和它的速度也非常快。
perl -pi -e '$.=0 if eof;print "first line\nsecond line\n" if ($.==1)' *.txt
gkn4icbw3#
如果不重写文件,在开头添加是不可能的(与在末尾添加相反)。你不能简单地“移动”文件内容,因为没有文件系统支持。所以你应该这样做:
echo -e "line 1\nLine2" > tmp.txt cat tmp2.txt oldbigfile.txt > newbigfile.txt rm oldbigfile.txt mv newbigfile.txt oldbigfile.txt
字符串请注意,您需要足够的磁盘空间来容纳这两个文件一段时间。
3条答案
按热度按时间aydmsdu91#
你应该试
字符串
q5iwbnjs2#
这一个是完美的工作和它的速度也非常快。
字符串
gkn4icbw3#
如果不重写文件,在开头添加是不可能的(与在末尾添加相反)。你不能简单地“移动”文件内容,因为没有文件系统支持。所以你应该这样做:
字符串
请注意,您需要足够的磁盘空间来容纳这两个文件一段时间。