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.

관련 정보