Este é um problema de buffer. O Awk se comporta de maneira diferente dependendo de ser interativo ou não. \n
libera o buffer de saída apenas no último caso, caso contrário, como ocorreu, o armazenamento em buffer acontece até que o buffer de saída esteja cheio ou seja esvaziado explicitamente com o comando fflush.
Eventualmente, haverá algo no arquivo de saída se você esperar por tempo suficiente.
Caso contrário, a saída deve ser liberada se você matar iostat
, não o script em si.
Como alternativa, veja uma solução simples:
script -c iosum.sh out.txt
Observe que a desativação do buffer (com script
ou fflush
explícito) está afetando o desempenho, então matar o processo iostat
( pkill -f "iostat -dmz 5"
) ou defini-lo para finalizar após um determinado período de tempo é uma abordagem melhor se você não precisa monitorar o conteúdo do arquivo, por exemplo com um período de captura de dois minutos:
iostat -dmz 5 120 |\
awk 'BEGIN{rx=wx=0}{if($0 == ""){printf"%.1f %.1f\n",rx,wx}else if($0~/^Device:/){rx=wx=0}else{rx+=$3;wx+=$4}}'