원격 서버의 쉘 변수를 사용하여 awk 명령 실행

원격 서버의 쉘 변수를 사용하여 awk 명령 실행
start_time="2021-02-10 08:17:38"
end_time="2021-02-10 09:17:38"
ssh [email protected] "awk -v start_tm=$start_time -v end_tm=$end_time '\$0 >= start_tm && \$0 <= end_tm' /var/log/app.log"

다음 오류가 발생했습니다.

awk: cmd. line:1: 08:17:38
awk: cmd. line:1:   ^ syntax error

서버에 SSH로 연결한 후 실행하면 동일한 awk 명령이 작동합니다. & 명령 앞에 백슬래시 \를 유지하려고 해도 마찬가지입니다. 저는 쉘 스크립팅을 처음 접했습니다. 참고할 만한 다른 사항을 제안해 주십시오.

답변1

전화하고 싶다면awk스크립트는 여기에 있습니다, 내부 변수 이스케이프에 대해 걱정할 필요가 없도록 항상 스크립트를 가지고 호출하는 것이 좋습니다.

ssh user@localhost "\
    awk -v start='$start_time' -v end='$end_time' -v q=\' \
        -f /path/to/awk-script.awk /path/to/log-file"

또한 우리는 이스케이프를 사용했습니다.$start_time그리고$end_time위의 인용문.


awk-script.awk포함하다:

BEGIN {
        st = "date -d" q start q " +%s"
        st | getline start
        close(st)
        ed = "date -d" q end q " +%s"
        ed | getline end
        close(ed)
}
    
{
        dt = $1 " " $2
        epoch = "date -d" q dt q " +%s"
        epoch | getline dt
        close(epoch)
}

(dt >= start && dt <= end) { print }

관련 정보