awk语法错误有助于识别

时间:2012-04-22 14:45:47

标签: bash awk

我似乎无法确定语法错误的位置。我已尝试过这两个语句,但没有任何内容写入'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"

1 个答案:

答案 0 :(得分: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"