2012-04-22 63 views
1

我似乎无法确定语法错误的位置..我尝试了这2条语句,但没有写入'BlockedIPs'文件。有人可以帮忙吗?谢谢!awk语法错误有助于识别

awk '/ (TCP|UDP)/{ split($5, addr, /:/); cmd = "/Users/user1/Scripts/geoiplookup " addr[1] | awk '{print $4, $5, $6}'; cmd | getline rslt; close(cmd); print $1, $2, $3, rslt }' < "$IP_PARSED" >> "$BlockedIPs" 


awk '/ (TCP|UDP)/{ split($5, addr, /:/); cmd = "/Users/user1/Scripts/geoiplookup " addr[1] " | awk '{print $4, $5, $6}'" ; cmd | getline rslt; close(cmd); print $1, $2, $3, rslt }' < "$IP_PARSED" >> "$BlockedIPs" 
+2

语法突出显示是否提供了提示?为什么不把所有这些放在正确的awk脚本中? – Mat 2012-04-22 14:48:54

+0

你的错误信息是什么? – kev 2012-04-22 14:52:03

+0

它没有给出,因为我通过launchd调用它。我不得不修改从这个cmd =“echo”addr [1]“|/Users/user1/Scripts/geo | fgrep国家:| cut -c 16-30”的声明,所以不用做echo $ IP | geoScript我想做geoScript $ IP我似乎无法看到问题出在哪里,因为它在终端提示符下运行良好。 – Jim 2012-04-22 14:55:00

回答

1

您的问题主要是引用和源于事实,你试图从AWK单线内调用AWK。这当然是可能的,但获得引用权是非常棘手的。

如果您将geoiplookup的完整输出检索到一个变量中,然后执行split()以获得您所需的数据,会更好。类似于:

awk '/ (TCP|UDP)/{ split($5, addr, /:/); cmd = "/Users/user1/Scripts/geoiplookup " addr[1]; cmd | getline rslt; split(rslt, r); close(cmd); print $1, $2, $3, r[4], r[5], r[6] }' < "$IP_PARSED" >> "$BlockedIPs"