Почему вывод iostat не перенаправляется в файл в следующей команде:
iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization
Отличается ли поведение iostat от любой другой команды?
Спасибо заранее
Почему вывод iostat не перенаправляется в файл в следующей команде:
iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization
Отличается ли поведение iostat от любой другой команды?
Спасибо заранее
Похоже, вам нужно добавить счетчик, чтобы сообщить потоку, когда он должен завершиться ( man iostat ) . Вы только добавляете интервал:
If the interval parameter is specified without the count parameter, the iostat command generates reports continuously.
Когда я пытаюсь:
iostat -x 3 6 | awk '/sda/ { print $11, $12}' > outfile
6
говорит iostat
остановиться после 6 итераций с 3-секундными интервалами. После завершения итераций iostat
я получаю файл output
.
В качестве альтернативы вы можете выбрать какое-либо выражение, чтобы заставить сценарий awk выйти. Когда я пытаюсь:
iostat -x 3 | awk -v max=10 '/sda/ { print $11, $12; max++ } NR > max { exit } ' > outfile2
Я получаю только 3 строки в output2
, что имеет смысл, потому что iostat -x
выводит на экран строк на экран.
Вы также можете заставить awk fflush(stdout)
в каждом цикле печати:
iostat -x 3 | awk '/sda/ { print $11, $12; fflush(stdout) }' > output3
а затем закройте iostat
с помощью <ctrl+c>
из оболочки.
Причина вашей проблемы в том, что канал буферизован (вероятно, 4k
), поэтому, если вы достаточно долго будете ждать, пока вывод будет сброшен в файл, он больше не будет пустым.
-x
. В противном случае я не могу воспроизвести эту проблему. - person kojiro   schedule 27.02.2014tee
. Печатает нормально, без переадресации. - person arco444   schedule 27.02.2014