Для обработки больших файлов вы можете выбрать один из двух подходов: использовать визуальный редактор, который удобно работает с большими файлами, или программно редактировать построчно. Тем не менее, файл 450 МБ не должен быть проблематичным для многих редакторов.
Джо - это текстовый редактор, который приемлемо работает с большими файлами.
Если вы заранее знаете, какие строки нужно редактировать, то есть их можно идентифицировать, не просматривая содержимое файла (по номеру строки или поиску), один из вариантов sed
, awk
или perl
может быть допустимой альтернативой. Возможно, вы захотите напечатать интересующие вас строки перед их редактированием.
Тесты: все эти решения хорошо работают в теории, но какое из них сэкономит вам больше всего времени?
Для очень грубого теста я создал текстовый файл объемом 1 ГБ, 33 миллиона строк на VPS KVM с 2vCPU (Xeon E5-2690 @ 2,90 ГГц), 2 ГБ ОЗУ и RAID SSD.
40s --> Joe (opening the file, editing a line, saving, exiting)
2s --> sed -n '15000000p;15000000q' file.txt
3s --> sed -n '149p' file.txt
10s --> sed '149s/File/Pile/' file.txt > file2.txt
3m15s --> sed -i '149s/File/Pile/' file.txt
4s --> perl -ne 'if($.==15000000){print;exit}' file.txt
8s --> perl -ne 'print if $.==149' file.txt
19s --> perl -pe 's/File/Pile/ if $.==149' file.txt > file2.txt
20s --> perl -i -pe 's/File/Pile/ if $.==149' file.txt
4s --> awk -n 'NR==15000000{print;exit}' file.txt
8s --> awk -n 'NR==149{print}' file.txt
15s --> awk 'NR==149{gsub("File","Pile")}1' file.txt > file2.txt
4m3s --> awk -i inplace 'NR==149{gsub("File","Pile")}1' file.txt
sed
был самым быстрым в чтении всего файла и отображении одной строки
sed
был самым быстрым в выполнении подстановки и сохранении в другой файл
perl
был самым быстрым в выполнении подстановки и сохранении под тем же именем файла