我的代码出现了这个语法错误 - 我试过把引号放在各个地方,但没有运气。有人可以帮助。谢谢!
awk: non-terminated string | grep Re... at source line 1
context is
>>> <<<
awk: giving up
source line number 2
awk '/ (TCP|UDP) / { split($5, addr, /:/);
cmd = "/bin/geoiplookup " addr[1] | grep 'Rev 1:' | sed 's/Rev 1: //g' " | awk -F', ' '{print $4",", $3",", $2}';
cmd | getline rslt;
close(cmd);
print $1, $2, $3, $4, $5, $6, rslt }' < "$IP_PARSED" >> "$BlockedIPs"
答案 0 :(得分:2)
awk
的参数未终止。 awk
正在解释你的其他管道并感到困惑。如果您确实打算将管道作为awk脚本的一部分,请考虑将awk
脚本作为文件(删除封闭的单引号)或用双引号替换最外面的单引号并使用{{1}避免介入双引号。不幸的是,你不能嵌套单引号。
答案 1 :(得分:1)
您正试图在单引号中嵌入单引号。这不起作用;而且,shell无法轻松嵌入它们。有一些复杂的方法,例如
$ echo 'hello'"'"'world'
hello'world
$ echo 'hello'\''world'
hello'world
注意:嵌入\'
使不工作,与双引号相同。
$ echo 'hello\'world'
hello\'world
答案 2 :(得分:1)
我想我们以前来过这里。不要试图在cmd
内进行复杂的处理。使用它来运行外部命令,然后在主AWK程序中进行处理。
awk '/ (TCP|UDP) / { split($5, addr, /:/);
cmd = "/bin/geoiplookup " addr[1] ;
while (cmd | getline rslt) {
if (rslt ~ /Rev 1: /) {
gsub(/Rev 1: /, "", rslt)
split(rslt, r, ",")
}
}
close(cmd);
print $1, $2, $3, $4, $5, $6, r[4], r[3], r[2] }' < "$IP_PARSED" >> "$BlockedIPs"