2012-03-22 2 views
-2

У меня есть очень большой текстовый файл (600mb), и я хочу удалить определенные строки из этого файла.Windows - удалить определенные строки из очень большого текстового файла

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

+0

Вы знаете, как использовать язык сценариев, таких как PHP или Python? Или вам нужно сделать это из текстового редактора? Если да, то какой текстовый редактор? –

+0

На каком языке? – Jon

ответ

0

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

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

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

0

Это можно сделать на C# с легкостью. Но я не знаю, это то, что вы хотите.

0

Спасибо за ответы. Я нашел простой способ сделать это в редакторе Vim для окон.

В качестве информации этот файл был предоставлен .sql-файлом для воссоздания базы данных mysql, поэтому у него не было никакой возможности, кроме как манипулировать им.

Еще раз спасибо ребятам.

+0

Если вы отправляете ответ на свой вопрос, не могли бы вы хотя бы подробнее узнать, что именно вы сделали, чтобы решить эту проблему? – Joey

+0

ОК, извинения. В Vim для окон, когда вы ищете текстовую строку (или переходите к определенной строке), она выделяет все, что находится между новым местоположением курсора и предыдущим, что позволяет просто удалить строки, о которых идет речь. Я смог удалить 4,8 миллиона избыточных строк из текстового файла, о котором идет речь, через пару минут. –

+0

Вы можете отредактировать свой пост. – Joey

0

В PowerShell:

$linesToRemove = 15,534,814,4632 
$encoding = 'ASCII' # or 'UTF8', depending on what you need 
Get-Content foo.sql | 
    ForEach-Object { $i=0 } { $i++ } | 
    Where-Object { $linesToRemove -notcontains $i }