1

我似乎无法确定语法错误在哪里..我尝试了这两条语句,但没有任何内容写入“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"


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

1 回答 1

1

您的问题主要在于引用,并且源于您试图从 AWK 单行代码中调用 AWK 的事实。这当然是可能的,但要正确引用将是非常棘手的。

geoiplookup如果您将完整的输出检索到一个变量中,然后执行 asplit()来获取您需要的数据,那会好得多。就像是:

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"
于 2012-04-22T15:37:27.807 回答