unix 在一个非常大的文件的开头添加两行的有效方法

6yt4nkrj  于 2023-11-18  发布在  Unix
关注(0)|答案(3)|浏览(150)

我有一组非常大的文本文件(每个文件有几个GB)。我需要在每个文件的开头添加两行。
我尝试使用sed和以下命令

sed -i '1iFirstLine'
sed -i '2iSecondLine'

字符串
sed的问题是它循环遍历整个文件,即使在开始时只添加两行,因此需要花费大量时间。
有没有一种更有效的替代方法,而不需要阅读整个文件?

aydmsdu9

aydmsdu91#

你应该试

echo "1iFirstLine" > newfile.txt
echo "2iSecondLine" >> newfile.txt
cat oldfile.txt >> newfile.txt
mv newfile.txt oldfile.txt

字符串

q5iwbnjs

q5iwbnjs2#

这一个是完美的工作和它的速度也非常快。

perl -pi -e '$.=0 if eof;print "first line\nsecond line\n" if ($.==1)' *.txt

字符串

gkn4icbw

gkn4icbw3#

如果不重写文件,在开头添加是不可能的(与在末尾添加相反)。你不能简单地“移动”文件内容,因为没有文件系统支持。所以你应该这样做:

echo -e "line 1\nLine2" > tmp.txt
cat tmp2.txt oldbigfile.txt > newbigfile.txt
rm oldbigfile.txt
mv newbigfile.txt oldbigfile.txt

字符串
请注意,您需要足够的磁盘空间来容纳这两个文件一段时间。

相关问题