Эффективный способ добавить две строки в начале очень большого файла

У меня есть группа очень больших (по пару ГБ каждый) текстовых файлов. Мне нужно добавить две строки в начале каждого из этих файлов.

Я попытался использовать sed с помощью следующей команды

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

Проблема с sed заключается в том, что он проходит по всему файлу, даже если в начале нужно было добавить только две строки, и, следовательно, это занимает много времени.

Есть ли альтернативный способ сделать это более эффективно, не читая весь файл?

3 ответа

Решение

Тебе стоит попробовать

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

Обратите внимание, что вам нужно достаточно места на диске для хранения обоих файлов.

Другие вопросы по тегам