Выходной канал в awk не обрабатывается сразу

Рассмотрим следующий фиктивный скрипт резервного копирования:

#!/bin/bash
echo "rsync started"
sleep 1 # rsync time
echo "rsync completed"
echo "starting upload"
sleep 5 # upload time
echo "upload completed" 

и следующий минимальный стартовый скрипт

#!/bin/bash
/path/to/backup.sh|awk '/^rsync completed/ {print "Restarting services"}'
echo "backup completed"

Я ожидал бы, что вывод "Restarting services" появится через одну секунду, но вместо этого он появится в конце через 6 секунд, когда работает под Debian Wheezy.

Где моя ошибка? Почему действие awk напрямую не обрабатывается, когда строка "rsync completed" записывается в stdout?

1 ответ

Используйте sed вместо awk.

/path/to/backup.sh|sed 's/^rsync completed/Restarting services/g'
echo "backup completed"
Другие вопросы по тегам