3

我的代码出现此语法错误 - 我尝试将引号放在不同的地方,但没有运气。有人可以帮忙吗。谢谢!

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"
4

3 回答 3

2

的论点awk没有终止。 awk正在解释您管道的其余部分并感到困惑。如果您确实打算将管道作为 awk 脚本的一部分,请考虑将awk脚本编写为文件(删除封闭的单引号)或用双引号替换最外层的单引号并用于\转义插入的双引号。不幸的是,您不能嵌套单引号。

于 2012-04-25T01:08:03.207 回答
1

您正在尝试在单引号内嵌入单引号。这不起作用;此外,shell 无法轻松嵌入它们。有一些复杂的方法,例如

$ echo 'hello'"'"'world'
hello'world
$ echo 'hello'\''world'
hello'world

注意:嵌入\'不起作用,就像双引号一样

$ echo 'hello\'world'
hello\'world
于 2012-04-25T01:14:33.237 回答
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"
于 2012-04-25T04:36:35.570 回答