1

構文エラーの場所を特定できないようです..これらの2つのステートメントを試しましたが、「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の完全な出力を変数に取得して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"
于 2012-04-22T15:37:27.807 に答える