linux + ssh + 1つのSSHで2つのことを行い、CSVで印刷する

linux + ssh + 1つのSSHで2つのことを行い、CSVで印刷する

次のコマンドは、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行はファイル全体)を印刷するように指示します-pperl-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/,$//'

おすすめ記事