A única razão pela qual você veria o tipo de dados mostrado (mais de dois campos por linha na saída do comando ssh
) é quando você coleta a saída da sua chamada ssh
+ ps
em uma variável e, em seguida, imprimi-lo sem citá-lo corretamente, como em output=$(ssh ...)
seguido por echo $output
em vez de echo "$output"
. Felizmente, você não precisa coletar os dados em uma variável.
while read remote; do
ssh -n -q -o StrictHostKeyChecking=yes "$remote" ps -eo comm,lastcpu |
awk -v host="$remote" '/rrcp/ { print host, $1, $2 }'
done <hosts.txt
Aqui, awk
está lendo diretamente do comando ssh
e também faz o trabalho originalmente feito por grep
em seu código. Ele assume que obterá linhas com dois campos e prefixará cada par de campos com o nome de host fornecido (lido em hosts.txt
).
Alternativamente,
while read remote; do
ssh -n -q -o StrictHostKeyChecking=yes "$remote" ps -eo comm,lastcpu |
sed "s/^/$remote /"
done <hosts.txt
Aqui, simplesmente prefixamos cada linha com o nome do host lido no arquivo de texto.