Isso realmente não tem nada a ver se os dados são armazenados no awk usando uma matriz ou não.
Como mencionado por @muru, você pode reformatar seus dados em colunas usando o comando column
awk 'NR > 1 {print $13,$14,$15}' | column -t
Alternativamente, apenas defina o separador de campos de saída do awk para TAB em vez de espaço diretamente
awk 'NR > 1 {OFS="\t"; print $13,$14,$15}'
Para requisitos de formatação mais complicados, você pode substituir a declaração print
por printf
, o que permitiria especificar explicitamente as larguras de campo, por exemplo,
awk 'NR > 1 {printf "%4s%8s%8s\n",$13,$14,$15}'
Para sua exigência de iostat
, a primeira coisa a observar é que você pode limitar a saída de iostat
apenas ao Relatório de utilização da CPU (omitindo o Relatório de utilização de dispositivo) adicionando a opção de linha de comando -c
, por exemplo
iostat -c 1 10
Além disso, se você quiser pular as linhas em branco e de cabeçalho repetidas, pode fazer algo como
iostat -c 1 5 | awk '/^$/ || /^avg-cpu:/ {next}; {print}'
Linux 3.13.0-45-generic (T61p) 15-03-02 _x86_64_ (2 CPU)
11.11 0.04 2.67 0.14 0.00 86.04
2.53 0.00 1.01 0.00 0.00 96.46
4.46 0.00 1.49 0.00 0.00 94.06
2.99 0.00 1.00 0.50 0.00 95.52
3.02 0.00 0.50 0.00 0.00 96.48
ou você pode fazer algo mais sofisticado para imprimir somente o primeiro %
cabeçalho:
$ iostat -c 1 5 | awk '/^$/ || (/^avg-cpu:/ && a) {next}; NR>1 {a=1;print}'
avg-cpu: %user %nice %system %iowait %steal %idle
11.11 0.04 2.67 0.14 0.00 86.04
2.02 0.00 0.51 0.00 0.00 97.47
4.04 0.00 0.51 0.00 0.00 95.45
2.50 0.00 1.00 0.00 0.00 96.50
3.02 0.00 1.01 0.00 0.00 95.98