2

これらの行から「DST=」を削除する方法がわかりません。これが私のコマンドです(必要なものを返します)。より効率的な方法またはより良い方法がある場合は、遠慮なく批判してください。

awk '{print $10}' iptables.log |sort -u

DST=96.7.49.64
DST=96.7.49.65
DST=96.7.50.64
DST=98.27.88.26
DST=98.27.88.28
DST=98.27.88.45
DST=98.27.88.50

ご覧のとおり、iptableログから一意のIPを取得する必要があります。

ありがとう!

4

4 に答える 4

2

ソートされていない出力が気にならない場合は、次を使用するより良い方法がありますawk

awk '!a[$10]++ { sub(/DST=/,"",$10); print $10 }' file
于 2013-02-14T03:36:18.883 に答える
1
awk '{split($10,a,"=");b[a[2]];next}END{for(i in b)print i}' iptables.log
于 2013-02-14T12:17:06.760 に答える
1

または、すべてを 1 つのプロセスに保持して、awk の同等のsub()機能を使用することもできます。つまり、

awk '{sub(/DST=/,"",$10); print $10}' iptables.log |sort -u

アップデート:

スペースが 10 であるか 11 であるかに関係なく、DST= だけにキーを設定する方法はありますか?

awk '$10~/^DST=/{sub(/DST=/,"",$10); print $10};$11~/^DST=/{sub(/DST=/,"",$11); print $11}' iptables.log | sort -u

また

awk '{for (i=9;i<13;i++) {
 if ($i ~ /^DST=/) { sub(/DST=/, "", $i); print $i}
 }
}' iptables.log | sort -u

ここでは、チェックして印刷するフィールドの範囲を変更できることに注意してください。たとえば、フィールド 9 ~ 12 をテストしています。awk の変数は、$1、$9、$87 などのように、現在の行$iの要素を参照します。i'th'

テストする iptables.log がないため、awk 構文が失敗しないことを確認する以外はテストできません。これが機能しない場合は、単純化されたデータのサンプル行を 2 ~ 4 行投稿してください。

IHTH

于 2013-02-14T03:22:30.467 に答える
1

出力の結果を sed にパイプして、各行から DST= を削除できます。

awk '{print $10}' iptables.log | sed 's/^DST=//' | sort -u
于 2013-02-14T03:19:57.647 に答える