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