awk 構文エラー 予期しない新しい行または文字列の終わり

awk 構文エラー 予期しない新しい行または文字列の終わり

これ /usr/sbin/conntrack -L |grep $1 | grep ESTAB |grep 'dport=80' | awk "{system("/usr/sbin/conntrack -D --orig-src $1 --orig-dst" substr($6,5) "-p tcp --orig-port-src " substr($7,7)" --orig-port-dst 80");}"

この出力を提供します
awk: cmd. line:2: {system(/usr/sbin/conntrack awk: cmd. line:2: ^ unexpected newline or end of string

これをデバッグする必要があります。

ベストアンサー1

あなたのawkスクリプト:

awk "{system("/usr/sbin/conntrack -D --orig-src $1 --orig-dst" substr($6,5) "-p tcp --orig-port-src " substr($7,7)" --orig-port-dst 80")}"

このスクリプトには引用の問題があります。

スクリプトは二重引用符で囲まれており、二重引用符も使用されます。内部二重引用符が原因で問題が発生する可能性があります。

解決策はスクリプトを一重引用符で囲むことです(シェルが解釈されないように、スクリプトはawk常に一重引用符で囲む必要があります)。$0

awk '{system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80")}'

grep実行中の最後の2つの呼び出しをスクリプトにawk簡単に移動することもできます。

awk '/ESTAB/ && /dport=80/ {system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80");}'

もう少し努力すれば、最初のものも手に入ります。

awk -v arg1="$1" 'match($0, arg1) && /ESTAB/ && /dport=80/ {system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80")}'

おすすめ記事