Bash awk语法错误帮助识别
我似乎无法确定语法错误在哪里..我尝试过修改这两条语句,但没有写入“BlockedIPs”文件。有人能帮忙吗?谢谢Bash awk语法错误帮助识别,bash,awk,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_PAR
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"
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\u 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”
您的问题主要在于引用,并且源于您试图从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"
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”>>“$blockedps”
您的问题主要在于引用,并且源于您试图从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"
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”>>“$blockedps”
语法突出显示是否给了您提示?为什么不把所有这些放在一个合适的awk脚本中呢?它不会给出一个,因为我通过launchd调用它。我不得不修改这个cmd=“echo”addr[1]“|/Users/user1/Scripts/geo | fgrep Country:| cut-c 16-30”中的语句,因此我不想执行echo$IP | geoScript,而想执行geoScript$IP,我似乎看不到问题出在哪里,因为它在终端提示中运行良好。语法高亮显示是否给您一个提示?为什么不把所有这些放在一个合适的awk脚本中呢?它不会给出一个,因为我通过launchd调用它。我不得不修改这个cmd=“echo”addr[1]“|/Users/user1/Scripts/geo | fgrep Country:| cut-c 16-30”中的语句,因此我不想执行echo$IP | geoScript,而是想执行geoScript$IP,因为它在终端提示符下运行良好,所以我似乎看不到问题出在哪里。。