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.