次のコマンドは、1 つの SSH 終了時に 2 つの値を出力します。
ssh test01 "hostname && cat /etc/sysconfig/rhn/rhnsd "
test01
INTERVAL=240
しかし、次の形式を印刷するように構文をどのように変更できますか? (CSV)
test01,INTERVAL=240
。
試してみましたが(予想していたものとは異なりました)
ssh test01 "hostname && cat /etc/sysconfig/rhn/rhnsd " | awk '{print $1","$2}'
test01,
INTERVAL=240,
ベストアンサー1
あなたがする必要があるのは、コマンドの出力を解析して最初の改行文字(\n
)をコンマに置き換えることだけです。これは働きます:
ssh test01 "hostname && cat /etc/sysconfig/rhn/rhnsd " |
perl -00pe 's/\n/,/'
ここではperl
、()を使用してファイル全体をメモリに入れ、-0
最初のファイルをコンマで置き換えます。\n
与えられたスクリプトを実行した後、入力の各「行」(1行はファイル全体)を印刷するように指示します-p
。perl
-e
awk
あなたがうまくいかないのは、各行awk
に提供したスクリプトを実行するためです。コマンドは2行を印刷しますが、どちらもフィールドが1つしかないため定義されてい$1
ませ$2
ん。したがって、最初と2番目の行print $1","$2
に展開すると、結果は次のようになります。print "test01"","
print "INTERVAL=240"","
test01,
INTERVAL=240,
考えられる解決策は次awk
のとおりです。
ssh test01 "hostname && cat /etc/sysconfig/rhn/rhnsd " |
awk '{printf "%s,", $1}' | sed 's/,$//'
これにより、各行の最初のフィールドが印刷され、その後にカンマが表示されます。このsed
コマンドは、印刷された最後の行の後のコンマを削除します。
1 つのフィールドの代わりに行全体を印刷するには、次のようにします。
ssh test01 "hostname && cat /etc/sysconfig/rhn/rhnsd " |
awk '{printf "%s,", $0}' | sed 's/,$//'