我有一组非常大(每个几个 GB)的文本文件。我需要在每个文件的开头添加两行。
我尝试使用 sed 和以下命令
sed -i '1iFirstLine'
sed -i '2iSecondLine'
sed 的问题在于它会循环遍历整个文件,即使必须在开头仅添加两行,因此会花费大量时间。
是否有另一种方法可以更有效地执行此操作,而无需读取整个文件?
我有一组非常大(每个几个 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
请注意,您需要足够的磁盘空间来保存这两个文件一段时间。