リモートサーバーのシェル変数を使用して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 }

関連情報