У меня есть текстовый файл 250 МБ, все в одной строке.
В этом файле я хочу заменить a
символы на b
символы:
sed -e "s/a/b/g" < one-line-250-mb.txt
Это терпит неудачу с:
sed: couldn't re-allocate memory
Мне кажется, что такого рода задачи могут быть выполнены в линию без выделения большого количества памяти.
Есть ли лучший инструмент для работы или лучший способ использования sed
?
GNU sed версия 4.2.1
Ubuntu 12.04.2 LTS
1 ГБ ОЗУ
text-processing
sed
performance
large-files
out-of-memory
Николас Рауль
источник
источник
Ответы:
Да, используйте
tr
вместо:sed
сделки в строках, поэтому огромная линия вызовет проблемы. Я ожидаю, что она объявляет переменную для хранения строки, и ваш ввод превышает максимальный размер, выделенный для этой переменной.tr
с другой стороны, имеет дело с символами и должен уметь правильно обрабатывать произвольно длинные строки.источник
sed -e "s/a/z/g" b.txt > c.txt
без проблем. Использование sed (GNU sed) 4.2.2.sed
версии, но это зависит от реализации или оборудования.sed
.Исторические версии sed и awk имели проблемы с памятью, в основном они были исправлены в более поздних версиях, но одно из классических проявлений этой проблемы довольно сильно ударило по Ларри Уоллу . его ответом было написать новый язык программирования - без ограничений памяти, кроме аппаратного. Он назвал это perl. Ваша конкретная проблема может быть решена более просто, но общее правило, которое я использую, - это когда sed не использует perl.
Редактировать: по запросу пример:
или для меньшего использования памяти:
источник
sed
Хотя немного разочарован . : \