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 命令也可以工作。即使我试图在 & 命令之前保留反斜杠 \ 。我是 shell 脚本新手,请提出其他需要注意的事情。
答案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 }