Используя awk
и целочисленную математику:
awk 'NR%3 == 1 { print } NR%3 == 2 { delay=$0 } NR%3 == 0 { print; print delay; delay=""} END { if(length(delay) != 0 ) { print delay } }' /path/to/input
Оператор модуля выполняет целочисленное деление и возвращает остаток, поэтому для каждой строки он возвращает последовательность 1, 2, 0, 1, 2, 0. [...]. Зная это, мы просто сохраняем ввод в строках, где модуль равен 2, на потом — то есть сразу после печати ввода, когда он равен нулю.
коротко: не напрямую
долго: он не переносится (не в POSIX ), но если вы ограничиваете свой интерес к Linux, вы можете перенаправить вывод из ] tail -f
через то, что является строчной буферизацией. Например, как предложено в unix command 'tail' lost option '--line-buffered' , GNU grep имеет параметр - line-buffered
, позволяющий сделать это
tail -f "$bg_file" | grep --line-buffered -E '^.*$'
Однако, как указано в руководстве
- строчная буферизация
Использовать строчную буферизацию , это может снизить производительность .
( FreeBSD имеет те же параметры и комментарии из OpenBSD в 2004 году , но не POSIX , пока ...).
В документации на это не указывается, но первоначальная фиксация в 2001 году учитывала время, потраченное на выполнение fflush
.