grep завершает работу из-за использования оперативной памяти - могу ли я заставить grep не использовать так много оперативной памяти?

Раздел подкачки - это традиционный способ в Linux работать с тем, что в Windows называется "виртуальной памятью". То есть, когда у вас заканчивается оперативная память (среди прочих ситуаций; другие примеры использования swap включают спящий режим системы (suspend to disk)), раздел swap будет использоваться как "переполнение" для того, что не помещается в оперативной памяти (что, конечно, будет медленнее, но означает, что ваша система может продолжать работать, а не аварийно завершать работу или убивать процессы случайным образом).

Итак, простой ответ заключается в том, что вам не нужно удалять этот раздел; это нормальная часть Ubuntu.

Расширенный раздел" можно рассматривать как "контейнер" для дополнительных разделов. Поскольку это очень старый формат, восходящий к временам IBM PC/MS-DOS, таблица разделов, используемая на современных компьютерах, по умолчанию допускает только четыре раздела. Чтобы позволить вам иметь больше, чем это, системы создают "расширенный раздел", который является просто другой (более мощной) таблицей разделов, хранящейся вместо раздела, что фактически дает вам возможность создавать любое количество разделов, а не только четыре.

(Если вы действительно очень хотите удалить его, чего я совсем не рекомендую делать, вы можете запретить системе использовать его, набрав "sudo swapoff /dev/sda3" в терминале перед удалением)

.
2
04.05.2018, 13:58
1 ответ

Команда sort имеет определенную поддержку для работы с огромными наборами данных, поскольку это относительно распространенный вариант использования. Огромные шаблоны grep — чрезвычайно необычный вариант использования, поэтому вы не можете надеяться, что разработчики приложили к этому много усилий.

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

sort originallist >originallist.sorted
sort cleaned1 | comm -23 originallist.sorted - >cleaned2.sorted

Если исходный порядок исходного списка имеет значение, вы можете добавить к нему номера строк:

nl -w 22 originallist >originallist.numbered
# then generate cleaned1 from the numbered list

Поскольку originallist.numberedотсортирован, вы можете запустить commдля него, чтобы обнаружить общие строки.

Если порядок имеет значение и нумеровать строки слишком поздно, можно попробовать разбить cleaned1на куски и сделать по одному проходу в originallistдля каждого куска. С недавним расколом GNU:

cp originalfile cleaned2.in
split -l 1000000 --filter='grep -Fxv -f - cleaned2.in >cleaned2.out; mv cleaned2.out cleaned2.in' cleaned1
mv cleaned2.in cleaned2

(Обратите внимание, что Fне выполняет «совпадение полной строки», а выполняет сопоставление подстроки. Для полного совпадения строк вам также потребуется -x.)

4
27.01.2020, 21:58

Теги

Похожие вопросы