LINUX.ORG.RU

Объясните, почему второй скрипт работает медленнее


0

1

Попробовал вместо

sed -i "s/$replace_what/$replace_with/g" "$tmpfile"
использовать
text=`echo "$text"|sed "s/$replace_what/$replace_with/"`
но так замена происходит даже медленнее! (см. скрипт 1 - 9 сек, скрипт 2 - 16 сек). Довольно странно - в первом случае, sed каждый раз заново проходит файл, а во втором случае, «$text» обрабатывается в памяти, и все равно медленнее! Можете объяснить, почему так?

Deleted

в первом случае, sed каждый раз заново проходит файл

Где такое написано? Во втором случае на два конвейера больше, от этого и медленнее.

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

В скрипте, вестимо, или вы на кофейной гуще гадать любитель?

Но мало ли, может там tmpfs или буфферизовано.

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

Где такое написано?

В скрипте, вестимо

В каком скрипте написано, что

sed каждый раз заново проходит файл

? Какая tmpfs в sed?

буфферизовано

А разве может быть иначе? ;-)

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

Где такое написано?

Это мое предположение. Я уже указал, что не программист, о конвейерах представления не имею.

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

Ну вот эта команда text=`создать процесс и передать его вывод в конвейер | создать другой процесс, который будет читать данные из конвейера и передать вывод в другой конвейер`. Вероятно, простая буферизация работает быстрее.

Кстати, во втором примере строка обрабатывается не целиком (/g отсутствует).

Тьфу, анонимус же писал, что я ссылок на скрипты не разглядел.

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

В каком скрипте написано, что

Тот, где употребляется sed -i: edit _files_ in place (makes backup if extension supplied). Или если буфферизованно, то уже не файл?

? Какая tmpfs в sed?

tmpfs там, где лежит промежуточный файл.

А разве может быть иначе? ;-)

У вас любой текст помещается в буффер?) Этот конкретный то ладно.

anonymous
()

Фактически, замена текста происходит только на 1-ой из 500 итераций.
Остальные 499 итераций sed -i только читает буферизованный файл, не производя записи. Оператор text=`echo «$text»|sed «s/$replace_what/$replace_with/»` требует больше процессорного времени.

backbone ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.