2010-07-15 9 views
5

Desidero utilizzare l'utilità di colonna per formattare l'output di iostat nelle colonne allineate.vmstat e colonna

voglio eseguire qualcosa di simile:

vmstat 1 10 | column -t 

Ma l'uscita appers solo dopo 10 secondi (vmstat completa il suo lavoro) e non ogni secondo.

Qualche idea?

risposta

3

La ragione per cui questo accade è che la colonna attende di raccogliere il maggior numero possibile di input su cui basare le sue ipotesi di colonna. Non ha modo di sapere che il pattern di dati si ripete ogni secondo.

È possibile approssimare quello che si vuole fare per l'esecuzione di questo:

for i in 0 1 2 3 4 5 6 7 8 9; do iostat | column -t; sleep 1; done 

EDIT

Grazie ad un paio di suggerimenti da Dennis:

for i in {0..9} ; do iostat 1 1 | column -t; sleep 1; done 

Il l'unica differenza rispetto all'originale è quella della prima testata la linea r viene ripetuta ogni secondo. Un po 'di footwork con sed o grep potrebbe occuparsene.

+0

Per vmstat utilizzando la vostra proposta è possibile eseguire: "vmstat | sed -n '1,2p' | colonna -t; per i in 0 1 2 3 4 5 6 7 8 9; fare vmstat | column -t | sed -n '3p'; sleep 1; done "che fornisce un output simile ma formattato a" vmstat 1 10 ". Non c'è davvero modo di farlo in modo semplice? – dimba

+1

@idimba: in Bash, puoi fare 'per i in {0..9}'. Puoi fare 'vmstat 1 1' in entrambi i posti. –

+0

@idimba: Scusa, non ho familiarità con il formato vmstat, quindi non ero a conoscenza di come volevi guardare le intestazioni. Penso che il suggerimento di Dennis lo renda piuttosto semplice. Modificherò la mia risposta per riflettere i nostri migliori sforzi combinati. –

0

credo che questo sia quello che stavi cercando di realizzare:

vmstat 1 10 | while read line 
do 
    echo "$line" | column -t 
done 
+0

Questo eseguirà solo 'column -t' una volta per iterazione, quindi la formattazione attraverso le" linee "di output non verrà risolta da questo. – slm

-1

Prova questa

vmstat 1 10 >> /tmp/vmout.txt; tail -f /tmp/vmout.txt 
Problemi correlati