Domanda

Perché l'output di iostat non viene reindirizzato al file nel seguente comando:

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

iostat si comporta in modo diverso rispetto a qualsiasi altro comando?

Thx in anticipo

È stato utile?

Soluzione

Sembra che sia necessario aggiungere un conteggio per dire al flusso quando terminare( uomo iostato ).Stai solo aggiungendo l'intervallo:

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

Quando ci provo:

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

il 6 dire iostat per fermarsi dopo 6 iterazioni di intervalli di 3 secondi.Dopo le iterazioni iostat completa e ottengo un output file.

In alternativa, è possibile scegliere un'espressione per far uscire lo script awk.Quando ci provo:

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

Ho solo 3 linee in output2 il che ha senso perché iostat -x produce circa un valore di schermi di linee di output sullo schermo.

Potresti anche forzare l'awk a fflush(stdout) in ogni ciclo di stampa:

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

e poi chiudere iostat con un <ctrl+c> dal guscio.

Altri suggerimenti

La causa del tuo problema è che il tubo è tamponato (probabilmente 4k), quindi se si attende abbastanza a lungo per l'output da scaricare al file che non sarà più vuoto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top