Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash awk语法错误帮助识别_Bash_Awk - Fatal编程技术网

Bash awk语法错误帮助识别

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

我似乎无法确定语法错误在哪里..我尝试过修改这两条语句,但没有写入“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"
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,因为它在终端提示符下运行良好,所以我似乎看不到问题出在哪里。。