Pergunta

Por que a saída do iostat não é redirecionada para o arquivo no seguinte comando:

iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization 

É o iostat comportar de forma diferente do que qualquer outro comando?

Thx antecipadamente

Foi útil?

Solução

Parece que você precisa para adicionar um contador para informar o fluxo quando terminar( man iostat ).Você está apenas adicionando o intervalo:

If the interval parameter is specified without the count parameter, the iostat command generates reports continuously. 

Quando eu tentar:

iostat -x 3 6 | awk '/sda/ { print $11, $12}' > outfile

o 6 diz iostat para parar após 6 iterações de 3 intervalos de segunda.Depois de iterações iostat completa e eu ter uma output arquivo.

Como alternativa, você pode escolher alguma expressão para causar o script awk para sair.Quando eu tentar:

iostat -x 3 | awk -v max=10 '/sda/ { print $11, $12; max++ } NR > max { exit } ' > outfile2

Eu recebo apenas 3 linhas output2 o que faz sentido porque iostat -x produz cerca de um telas pena de linhas de saída para a tela.

Você também pode forçar o awk para fflush(stdout) em cada ciclo de impressão:

iostat -x 3 | awk '/sda/ { print $11, $12; fflush(stdout) }' > output3

e, em seguida, feche iostat com um <ctrl+c> a partir do shell.

Outras dicas

A causa do seu problema é que o pipe é tamponada (provavelmente 4k), por isso, se você esperar o tempo suficiente para a saída a ser liberados para o arquivo deixará de ser vazio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top