ライブフィードをソートまたは統合する方法

ライブフィードをソートまたは統合する方法

tcpdumpライブフィードでIPをソートして隔離したいです。

tcpdump -n -i tun0 "tcp[tcpflags] & (tcp-syn) != 0" | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}

うまくいきますが、プログラムを追加しようとするとuniq失敗します。

tcpdump -n -i tun0 "tcp[tcpflags] & (tcp-syn) != 0" | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" |  uniq -u

何も返しません。

と同じですsort -u

この問題を解決する方法についてのアイデアはありますか?

答え1

理論的な問題があります。sortすべての入力が処理されるまで何も印刷できません。uniq重複した行だけが圧搾されているので(前に来る場合が多いsort)、入力に同じ行が2回連続している場合にのみ、出力は入力とは異なります。入力が多少ランダムであれば、おそらく違いを感じないでしょう。

最善の方法は、入力を1行ずつ読み、それが表示されていることを確認する簡単なPerlプログラムです。それ以外の場合は、入力を印刷して、この入力のハッシュテーブルに追加します。

#!/usr/bin/perl
my %LINES ;

while (<STDIN>) {

    if (! $LINES{$_}) {
        $LINES{$_} = 1 ;
        print $_ ;
    }
}

もちろん、すでに見た行のリストも増え、プログラムが占めるメモリも増えます。

私はあなたがそれで何をするのかわかりませんが、現在の日付を印刷に追加し、後で入力を削除できるようにハッシュに追加すると思います。N時間。

関連情報