LINUX.ORG.RU

Этого не может быть. Он построчно файл читает. Скорее всего ты iconv первым выполняешь, а потом grep

rtxtxtrx ★★★
()
Ответ на: комментарий от rtxtxtrx

Может у него 10 гб файл из одной строки - вот и читает её всю.

firkax ★★★★★
()

«cat file | grep ...» даёт такой же результат?

IMHO когда эти утили видят регулярный файл, то они читают его через mmap(). Так быстрее, но весь файл оказывается в памяти.

А из пайпы/сокета они читают стандартным read().

PS grep с регулярками тоже может жрать память.

vel ★★★★★
()

Это заговор.

anonymous
()
Ответ на: комментарий от vel

с cat ... жрет медленнее, но память всё равно растёт.

sergej ★★★★★
() автор топика
Ответ на: комментарий от sergej

Для iconv такое поведение норма https://sourceware.org/bugzilla/show_bug.cgi?id=6050 что напрямую, что из пайпа он пытается прочитать весь файл, чтобы проще было. Я так и не понял из обсуждения бага, действительно ли iconv может работать без буферезации всего файла/потока или нет и насколько рабочие патчи предложены.

А с grep непонятно. Что за файл, там нет очень длинных строк? И насколько сложное регулярное выражение?

mky ★★★★★
()
Ответ на: комментарий от mky

Про строки думал, наверное стоит проверить.

Но вобще не должно быть, там дамп базы в формате csv гигабайт на 100.

sergej ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Я пробовал grep -F, не помогает.

sergej ★★★★★
() автор топика

Попробуй powershell.

anonymous
()
   Known Bugs
       Large repetition counts in the {n,m} construct may cause grep to use lots of memory.  In addition, certain other obscure regular expressions require exponential time and space, and may cause grep to run out of memory.
slowpony ★★★★★
()

Присоединяюсь к части выше отписавшихся. Покажите само условие которое используете в грепе.

anc ★★★★★
()
Ответ на: комментарий от anc

условие примерно такое

cat file | grep 12345678

файл около 100Гб, никаких регекспов искать не надо.

В таком варианте через пайп память растёт, но медленно. В варианте

grep 12345678 file

он явно всё пытается всосать наверное через mmap и быстро прибивается earlyoom.

sergej ★★★★★
() автор топика
Ответ на: комментарий от sergej

Вот wc -L - хорошая команда, занял 2Мб res и спокойно считает.

sergej ★★★★★
() автор топика
Ответ на: комментарий от anonymous

А, уже вижу, что дамп базы. Кто бы сомневался. Надо его загрузить и пользоваться нормальными инструментами СУБД, а не утилитами для небольших файлов.

anonymous
()
Ответ на: комментарий от anonymous

не утилитами для небольших файлов.

Это всё понятно, непонятно что заставляет разработчиков grep и iconv всасывать всё в память. Я как-то думал, что эти утилиты про потоки, чтоб можно было удобно сделать кучу пайпов и нормально обработать гигабайты данных.

sergej ★★★★★
() автор топика
Ответ на: комментарий от sergej

А не, я всё понял, wc -L наконец то посчитал. Там правда есть очень очень длинная строка или файл побился.

sergej ★★★★★
() автор топика
Ответ на: комментарий от sergej

Проверил сейчас (даже без LC_ALL и -F) на файле в несколько десятков гигов, память не жрет и целиком в нее файл не засовывает

grep 123456789 file

anonymous
()
Ответ на: комментарий от anonymous

Ну да, вопросов к грепу нет, у меня это из-за битого файла с очень длинной строкой. К iconv скорее вопросы есть, но да чёрт с ним.)

sergej ★★★★★
() автор топика
Ответ на: комментарий от sergej

-F я пробовал, если ты про это

Да, про это. Поленился прочесть все комментарии перед тем, как отвечать :)

anonymous
()
Ответ на: комментарий от sergej

Проблему iconv решил uconv, он не сосёт всё в себя.

sergej ★★★★★
() автор топика

grep не кушает

anc ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.