Решено: обработка большого текстового файла

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21257
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Решено: обработка большого текстового файла

Сообщение Bizdelnick »

azsx писал(а):
03.10.2014 11:41
в grep есть параметр -w однако, он именно берет слово с двумя пробелами (типа " газ "). А как сделать выборку именно по одному слову?

С кириллицей (по крайней мере в UTF-8) это не прокатывает. Для латиницы и -w нормально работает, и метасимвол \b можно использовать для поиска границы слова.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Решено: обработка большого текстового файла

Сообщение Hephaestus »

Bizdelnick писал(а):
02.10.2014 17:13
vim считывает файл в память целиком, а grep - по строкам.
Согласен, grep быстрее, но всё же на больших файлах у меня бывало довольно медленно.

Bizdelnick писал(а):
02.10.2014 17:13
Hint: use tail(1).
Думаете, я об этом не знаю? Знаю.
Просто tail выдаёт определенное количество строк, а мне бывает нужно перемещаться по файлу вверх-вниз на произвольное расстояние.
Кстати вот это
Hephaestus писал(а):
02.10.2014 16:51
Попробовал перенаправить на вход less и перейти в конец - не смог, зависает.
возможно из-за терминала. Я нажимал клавишу End, чтобы перейти в конец, и она похоже, не срабатывает.
Так что, возможно, это не зависание, а просто ничего не происходит.

azsx писал(а):
02.10.2014 19:03
Hephaestus вы может говорите верно, но для моего уровня образованости - рано говорите. Надо подождать пока у меня хоть что то заработает, а уже потом говорить о бд которые надо спроектировать.
С учетом вот этих Ваших результатов
azsx писал(а):
03.10.2014 04:51
я в шоке. grep обработал файл за 9 минут (секунды сокращаю)
С БД можно не заморачиваться. Хороший результат. Просто отличный.

azsx писал(а):
02.10.2014 19:03
работает медленно, но у них есть чит - файлы разделены по языкам откуда собрали данные. Только вот при проектировании титлов интернет магазинов для буржуев приходится использовать всю бд. Но вообще бд пастухова работает более чем медлено в родной оболочке даже при выборке только ру кеев.
Ах, всё-таки медленно. Я так и думал.
Имею опыт общения с базами ПС Гарант.
Причём в динамике. Сначала база весила менее 4Гб и распространялась на DVD (портативная версия).
Потом база разрослась где-то до 8-10-12Гб и на диск уже не влезала. Предлагали флешку.
Потом она была уже 14Гб, а под конец около 30Гб. Так вот там обновление базы происходило часа полтора-два.
Но сам поиск работал быстро - там бинарный формат и индексы. Как оно крутилось бы без индексов - даже не знаю.

azsx писал(а):
02.10.2014 19:03
хочу разобраться в grep, однако man по нерусски, а примеров в сети для меня явно не достаточно.
По регулярным выражениям есть целая книга. Если денег не жалко, присмотритесь.

azsx писал(а):
03.10.2014 11:41
вот не могу понять, например мне надо определенное слово "газ"
Припоминаю, что grep умеет брать ключи поиска из файла. Параметр -f, если не ошибаюсь.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21257
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Решено: обработка большого текстового файла

Сообщение Bizdelnick »

Hephaestus писал(а):
03.10.2014 15:56
Просто tail выдаёт определенное количество строк, а мне бывает нужно перемещаться по файлу вверх-вниз на произвольное расстояние.

Что, и tail -n1000 file.log | less не хватит?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Решено: обработка большого текстового файла

Сообщение Hephaestus »

Bizdelnick писал(а):
03.10.2014 17:00
Что, и tail -n1000 file.log | less не хватит?
Мне было проще сделать cat file.log | less, а дальше использовать поиск и свободное перемещение по файлу.
И не думать о том, сколько вывести строк и попадут ли в выборку нужные мне строки.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Решено: обработка большого текстового файла

Сообщение azsx »

Как оно крутилось бы без индексов - даже не знаю.

я зато в теории легко бы решил этот вопрос, при этом индексы будут маленькими. Просто надо разделить лексические единицы (слова) на шинглы и живой поиск делать именно по ним. При этом будет 2 этапа: 1. получить данные; 2. отранжировать их согласно алгоритму.
уметь бы...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21257
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Решено: обработка большого текстового файла

Сообщение Bizdelnick »

Hephaestus писал(а):
03.10.2014 17:08
Bizdelnick писал(а):
03.10.2014 17:00
Что, и tail -n1000 file.log | less не хватит?
Мне было проще сделать cat file.log | less, а дальше использовать поиск и свободное перемещение по файлу.
И не думать о том, сколько вывести строк и попадут ли в выборку нужные мне строки.

Оно всегда проще. Когда работает. (-:
Я бы в таком случае сначала грепнул, чтобы выяснить номера нужных строк, а потом уже tail | less.
Кстати, зачем тут cat? Он ведь тоже память потребляет, хоть и немного.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Решено: обработка большого текстового файла

Сообщение Hephaestus »

Bizdelnick писал(а):
03.10.2014 17:24
Кстати, зачем тут cat? Он ведь тоже память потребляет, хоть и немного.
Привычка. Одно время пользовался less file.ext, но некоторые файлы less считывал некорректно (что-то там насчет типов файла и подсветки синтаксиса), случалось это всякий раз некстати - некогда было разбираться, наиболее простой вариант был - считывать с помощью cat. Потом уже сразу стал использовать cat. С тех пор и пользуюсь.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Решено: обработка большого текстового файла

Сообщение Hephaestus »

azsx писал(а):
03.10.2014 17:09
я зато в теории легко бы решил этот вопрос
Я имел в виду конкретную базу - ПС Гарант.
Она явно не была рассчитана на те объемы, которых достигла за довольно короткое время (год-два).

Оффтоп
Spoiler

База разрослась, но схема обновления (пополнения баз) не изменилась.
Как-то раз я наблюдал за процессом (следил за изменением файлов).
База состояла из нескольких больших (по 2Гб) файлов, а обновления были в виде маленьких архивов (они назывались дельты). Схема была такая: открываем первый большой файл, прикручиваем к нему первую дельту, открываем второй большой файл, прикручиваем к нему первую дельту и т.д. Потом опять открываем первый большой файл, прикручиваем вторую дельту и т.д. То есть каждый большой файл открывался столько раз, сколько дельт было в архиве (а их могло быть штук десять). Хотя логичнее было сделать наоборот: открыть большой файл, прикрутить к нему все дельты, закрыть и больше не трогать. Потом второй и т.д.
Пока база была небольшого размера, разница была незаметна. По мере разрастания базы это стало занимать много времени, особенно если машина не самая быстрая (рекомендовали даже оставлять на ночь).
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали: