Я ищу инструмент, чтобы найти строку, содержащую искомый текст внутри файла размером 4 ГБ
Если у вас установлен PowerShell, вы можете использовать
select-string -pattern <your_string> -path <path_to_file>
Вероятно, это будет не быстро, но и не захлебнется, как, вероятно, find или findstr.
Когда вы используете * nix, вы также можете использовать split
чтобы получить файлы меньшего размера, а затем проанализировать их тем, что вам нравится, будь то grep, awk, ...
Используйте grep. Быстро ничего не будет.
Не бесплатно, но если это текстовый файл, то BareTailPro может сработать. Я использовал его для поиска текста в файлах журнала, которые были слишком большими, чтобы поместиться в памяти. Одним из преимуществ является то, что он не просто показывает текст, но позволяет вам переходить в текстовый файл, чтобы вы могли видеть строки до и после попаданий.
Если вы делаете это достаточно часто и файл разбит на логические строки, вы можете загрузить его в Splunk и искать оттуда. Он будет выполнять индексацию, чтобы вы могли быстрее (э-э).
Я бы использовал grep on * nix, и я бы использовал текстовый редактор более высокого уровня (например, Notepad ++) в Windows.
Это зависит от приложения, необходимого времени ответа и того, что вы готовы сделать для достижения этих целей.
Недавно я работал с текстовым файлом размером 10+ ГБ, 50+ миллионов строк, и мне нужно было искать определенные строки в каждой строке. Стандартный инструмент Unix "grep" сделал свое дело, но потребовал неприемлемо много времени (несколько минут). Я импортировал текст в базу данных postgreslq (это был CSV-файл, легко импортированный), и после индексации ключа, по которому мне нужно было искать, мне потребовалось менее 1 секунды, чтобы найти мою запись.
Конечно, моя рабочая станция одноядерная, всего с 4 ГБ ОЗУ, 4-летним процессором 2 ГГц и файловой системой ZFS, использующей потребительские диски PATA 5+ лет назад. Ваш пробег, безусловно, будет отличаться. Тем не менее, разница во времени между двумя методами ошеломляет.
Если ваши данные представляют собой текст произвольной формы, вы все равно можете рассмотреть возможность импорта в базу данных, которая поддерживает полнотекстовый поиск и соответствующим образом индексирует для поддержки такого поиска.
Даже если у вас есть ОЗУ для кэширования всего файла и быстрая машина, выполнение линейного поиска файлов такого размера будет неэффективным по времени, в зависимости (опять же) от приложения.
В командной строке Windows CMD есть две команды FIND
и FINDSTR
. Они, вероятно, будут подавляться файлом такого размера или будут работать очень медленно, но они у вас уже есть.
Тип help findstr
и help find
для документации.