SSHリモート接続を介してawkを使用する場合は、チルダの区切りに関するアドバイスが必要です。

SSHリモート接続を介してawkを使用する場合は、チルダの区切りに関するアドバイスが必要です。

さようなら行ってください。

awkを使用してSSH経由でリモート接続するときにチルダを切り離そうとします。 localhostでコマンドを実行すると、コマンドは期待どおりに機能します。リモートサーバーで同じコマンドを使用しようとすると、構文エラーが返されます。

-bash-4.2$ /opt/SMAW/bin/RtpDumpLog -s 2111250000 | awk '$4 ~ /major/ { print }'
05-12-2021 02:11:20  141-9994  major        "OEM:cscf0002vm003oam001:sshd: sshd[32721]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:11:21  141-9994  major        "OEM:cscf0002vm003oam001:sshd: sshd[32724]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:11:22  141-9994  major        "OEM:cscf0002vm003oam001:sshd: sshd[32726]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:11:25  141-9994  major        "OEM:cscf0002vm003oam001:sshd: sshd[911]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:11:27  141-9994  major        "OEM:cscf0002vm003oam001:sshd: sshd[914]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:12:10  141-9994  major        "OEM:cscf0002vm003oam001:sshd: sshd[1081]: fatal: Write failed: Connection reset by peer [preauth]"
05-12-2021 02:12:11  141-9994  major        "OEM:cscf0002vm003oam001:sshd: sshd[1083]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:15:24  141-9994  major        "OEM:cscf0002vm003oam001:sshd: sshd[2332]: fatal: Write failed: Connection reset by peer [preauth]"
06-12-2021 19:18:14  141-9994  major        "OEM:cscf0002vm003oam001:sshd: sshd[30695]: fatal: Write failed: Broken pipe [preauth]"

リモートサーバーへ:

-bash-4.2$ ssh -q 192.168.210.142 "/opt/SMAW/bin/RtpDumpLog -s 2111250000 | awk '$4 ~ /major/ { print }'"
awk: cmd. line:1:  ~ /major/ { print }
awk: cmd. line:1:  ^ syntax error

チルダを区別するためにバックスラッシュを使ってみました。

-bash-4.2$ ssh -q 192.168.210.142 "/opt/SMAW/bin/RtpDumpLog -s 2111250000 | awk '$4 \~ /major/ { print }'"
awk: cmd. line:1:  \~ /major/ { print }
awk: cmd. line:1:  ^ backslash not last character on line

アドバイスしてください。

ありがとう、ビヨルン

ベストアンサー1

awkリモートホストで実行しないでください。

ssh -q 192.168.210.142 /opt/SMAW/bin/RtpDumpLog -s 2111250000 |
awk '$4 == "major"'

問題は、チルダではなく$4二重引用符で囲まれた文字列にチルダを使用していることです。$4呼び出しシェルからその値が空であるため削除されたことがわかります。

リモートホストで完全パイプラインを実行する必要がある場合は、ここで参照されているドキュメントに記載されているスクリプトを使用することをお勧めします。

ssh -q 192.168.210.142 sh -s <<'SCRIPT_END'
/opt/SMAW/bin/RtpDumpLog -s 2111250000 |
awk '$4 == "major"'
SCRIPT_END

を使用すると、-sコマンドはここのコマンドドキュメントshにリンクされている標準入力ストリームから読み取られます。私はあなたのログインシェルが何であるかわからないので、ここで明示的に呼び出すことにしsshました。sh標準シェルならshあきらめることもできますsh -s

おすすめ記事