Примеры замены текста в файлах

Версия для печатиОтправить другуPDF version

Возникла необходимость изменения некоторых параметров в файле большого размера (дамп базы данных больше трех гигабайт). Редакторы отпадают (слишком тяжело им "ворочать" таким обьемом данных), но для интереса попробовал с помощью таких редакторов:

  • joe - выпадал в корку (не хватало места в /tmp, размером 2 GB)
  • mcedit - ругался при запуске, что "файл слишком большой"
  • ee - "немного задумавшись" открыл файл, довольно шустро работал с поиском. Но вот замены что-то не обнаружил (не юзаю я этот редактор, а разбираться как-то неохота)
  • vi - также "задумчиво" открыл файл. Замену произвел с помощью команды ":g/old_text/s//new_text/g<ENTER>". Запись файла по команде ":wq" также заняла довольно продолжительное время. Но отработалось

 Для решения подобной задачи все таки лучше использовать другие способы. Итак, исходные данные:

# cat example.txt
I have two powerfull laptops.

Заменим строку "laptops" на "servers" несколькими способами.

Способ 1. Замена подстроки в одном файле с помощью sed

# sed -e 's/laptops/servers/g' example.txt > example_new.txt
I have two powerfull servers.

 Способ 2. Замена подстроки в одном файле с помощью perl

# perl -e 's/laptops/servers/g' -pi example.txt

 Способ 3. Замена подстроки с помощью awk

# awk '{gsub("laptops", "servers", $0); print > FILENAME}' example.txt

 Теперь отсортируем выводы по ресурсоемкости операций (использовалась утилита time, замена использовалась для файла размером 2.3GB)

Способ 1

10.915u 9.029s 2:35.01 12.8% 37+1490k 14962+18828io 0pf+0w

Способ 2

7.445u 9.400s 2:52.98 9.7%      5+1503k 19574+18828io 0pf+0w

Способ 3

0.000u 0.077s 0:00.42 16.6%     154+1332k 9+0io 9pf+0w

 

Информация для размышлений предоставлена, а необходимый результат достигнут.

 

Ваша оценка: Нет Средняя: 5 (1 голос)

Re: Примеры замены текста в файлах

 Как-то странно, обычно sed работает намного быстрее, чем awk и тем более perl. А результаты говорят обратное

Re: Примеры замены текста в файлах

У себя пробовали провести тестирование? Какие результаты?

Re: Примеры замены текста в файлах

У меня awk "урезает" исходный файл до 4097 байт!

Есть идеи по поводу причин такого странного поведения?

cat /etc/redhat-release
CentOS release 6.6 (Final)
[root@web-linux backup]# awk --version
GNU Awk 3.1.7

 

Re: Примеры замены текста в файлах

вместо:

# awk '{gsub("laptops", "servers", $0); print > FILENAME}' example.txt

сделать так:

# awk -i inplace '{gsub("laptops", "servers", $0)} 1' example.txt

Re: Примеры замены текста в файлах

а если перед запуском кеш почистить? echo 3 > /proc/sys/vm/drop_caches

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература