Para lidar com arquivos grandes, você pode escolher uma das duas abordagens: use um editor visual que trabalhe confortavelmente com arquivos grandes ou edite programaticamente linha por linha. Dito isso, um arquivo de 450MB não deve ser problemático para muitos editores.
-
joe é um editor de texto que funciona bem com grandes arquivos.
-
Se você souber de antemão quais linhas precisam ser editadas, ou seja, elas podem ser identificadas sem você olhar o conteúdo do arquivo (por número de linha ou pesquisa), um
sed
,awk
ouperl
poderia ser uma alternativa válida. Você pode querer imprimir as linhas de seu interesse antes de editá-las.
Benchmarks: todas essas soluções funcionam bem na teoria, mas qual delas economizará mais tempo?
Para o propósito de um benchmark muito difícil , criei um arquivo de texto de 1GB, 33 milhões de linhas em um KVM VPS com 2vCPU (Xeon E5-2690 @ 2.90GHz), 2GB de RAM e 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
foi o mais rápido em ler o arquivo inteiro e exibir uma única linha -
sed
foi o mais rápido em realizar uma substituição e salvar em um arquivo diferente -
perl
foi o mais rápido em realizar uma substituição e salvar no mesmo nome de arquivo