つまり、単一行の出力文字列を複数の行に分割し、各ソース文字列にホスト名をタグ付けしたいと思います。
ホスト名 プロセス名 CPUCore
出力=$(ssh -q -o "StrictHostKeyChecking yes" $ssh_host 'ps -eo comm,lastcpu | grep rrcp')
次のように出力を返してループを挿入するにはどうすればよいですか?
rrcpd 17 rrcpd 0
次のように書き直されました。
Hostname1 rrcpd 17
Hostname1 rrcpd 0
ノート
数字は0〜32です。
ホスト名は変数文字列$ myhostです。
テキストが変更されます。これは厳密に言うと、rrcpdではないという意味です。
rrcpd 17 rrcpd 0
チーズ3ケーキ8
猫9個3
各ホストで実行するコマンド
出力=$(ssh -q -o "StrictHostKeyChecking yes" $ssh_host 'ps -eo comm,lastcpu | grep rrcp')
grepを削除すると、3〜5個のプロセスを経て出力が再び出ることができるので、各出力を分割してソースファイルにホスト名を追加して、各出力にラベルを付けることができるようにしたいと思います。各ホストでどのプロセスが実行されているかを確認しています。
rrcpd 0 rrcp_mon.sh 24
RRCPD 0
RRCPD 0
rrcpd 0 rrcpd 1
rrcpd 0 rrcpd 0 rrcp_mon 24 rrcp_mon 24
RRCPD 0
RRCPD 0
rrcpd 17 rrcpd 0
ard 9 ssh 32 httpd 21 bax 22
下記の内容を修正して動作させました。
#!/bin/bash
for remote in $(cat ssh_hosts2.txt)
do
ssh -q -o StrictHostKeyChecking=yes "$remote" ps -eo comm,lastcpu |
sed "s/^/$remote /"
done
ベストアンサー1
これを試してください、
与えられたサンプル出力を/tmp/test.txtファイルに保存しました。
xargs -n 2 | sed 's/^/Hostname1 /'
-n
行あたりの最大パラメータを示します。
例えば。
cat /tmp/test.txt | xargs -n 2 | sed 's/^/Hostname1 /g'
Hostname1 rrcpd 17
Hostname1 rrcpd 0
Hostname1 Cheese 3
Hostname1 cakes 8
Hostname1 Cats 9
Hostname1 dogs 3