Um método é usar printf
:
$ awk '$1 ~/top/ {printf "%s ",$5;} $1 ~/Mem/ {printf "%s ",$4;} $1 ~/Swap/ {print $4;}' top-output
3:36, 9594508k 0k
printf
oferece formatação flexível e, a menos que você explique explicitamente, imprime um caractere de nova linha. O primeiro argumento para printf
é a string de formato para printf
. A string de formato está documentada em man awk
.
Outro método para salvar os valores e usar print
apenas uma vez:
$ awk '$1 ~/top/ {up=$5;} $1 ~/Mem/ {used=$4;} $1 ~/Swap/ {print up,used,$4;}' top-output
3:36, 9594508k 0k
Adicionando a vírgula extra
$ awk '$1 ~/top/ {printf "%s ",$5;} $1 ~/Mem/ {printf "%s, ",$4;} $1 ~/Swap/ {print $4;}' top-output
3:36, 9594508k, 0k
$ awk '$1 ~/top/ {up=$5;} $1 ~/Mem/ {used=$4;} $1 ~/Swap/ {print up,used",",$4;}' top-output
3:36, 9594508k, 0k
Removendo o k
Com printf, podemos especificar um formato inteiro e isso força a conversão para um número que remove o k
:
$ awk '$1 ~/top/ {printf "%s ",$5;} $1 ~/Mem/ {printf "%i, ",$4;} $1 ~/Swap/ {print $4;}' top-output
3:36, 9594508, 0k
Outra maneira de forçar uma conversão para um número é adicionar zero a ele. Assim, o seguinte usa used=$4+0
no lugar de used=$4
:
$ awk '$1 ~/top/ {up=$5;} $1 ~/Mem/ {used=$4+0;} $1 ~/Swap/ {print up,used",",$4;}' top-output
3:36, 9594508, 0k
Remover a vírgula do tempo de atividade
O tempo de atividade tem dois pontos entre dois números e o awk não pode convertê-lo em um número. Isso significa que outras abordagens são necessárias. Uma maneira de fazer a vírgula desaparecer da saída é adicionar uma vírgula ao separador de campo:
$ awk -F'[,[:space:]]+' '$1 ~/top/ {printf "%s ",$5;} $1 ~/Mem/ {printf "%s ",$4;} $1 ~/Swap/ {print $4;}' top-output
3:36 9594508k 0k
$ awk -F'[,[:space:]]+' '$1 ~/top/ {up=$5;} $1 ~/Mem/ {used=$4+0;} $1 ~/Swap/ {print up,used,$4;}' top-output
3:36 9594508 0k