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

时间:2012-09-11 11:28:30

标签: unix command-line sed text-files

我有一组非常大(每个GB几个)的文本文件。我需要在每个文件的开头添加两行。

我尝试使用以下命令使用sed

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

sed的问题在于它遍历整个文件,即使必须在开头只添加两行,因此需要花费大量时间。

是否有其他方法可以更有效地执行此操作,而无需读取整个文件?

3 个答案:

答案 0 :(得分:5)

你应该试试

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

答案 1 :(得分:3)

这个非常好用,也非常快。

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

答案 2 :(得分:1)

如果没有文件重写,则无法在开头添加(与追加到末尾相反)。你根本无法“转移”文件内容,因为没有文件系统支持。所以你应该这样做:

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

请注意,您需要足够的磁盘空间来暂存两个文件。