157

状況:

数時間のネットワーク キャプチャからの IP アドレスとポートを含む大きなファイル (数百万行) があり、1 行に 1 つの ip/port があります。行は次の形式です。

ip.ad.dre.ss[:port]

望ましい結果:

ロギング中に受信したパケットごとにエントリがあるため、重複するアドレスが多数あります。形式の行に減らすことができる何らかのシェルスクリプトを介してこれを実行できるようにしたいと思います

ip.ad.dre.ss[:port] count

ここcountで、 はその特定のアドレス (およびポート) の出現回数です。特別な作業は必要ありません。異なるポートを異なるアドレスとして扱います。

これまでのところ、次のコマンドを使用して、ログ ファイルからすべての IP アドレスを取得しています。

grep -o -E [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(:[0-9]+)? ip_traffic-1.log > ips.txt

そこから、かなり単純な正規表現を使用して、自分のアドレスから送信されたすべての IP アドレスをかき出すことができます (これは気にしません)。

次に、以下を使用して一意のエントリを抽出できます。

sort -u ips.txt > intermediate.txt

どういうわけかソートで行数を集計する方法がわかりません。

4

3 に答える 3

354

コマンドを使用してuniq、並べ替えられた繰り返し行の数を取得できます。

sort ips.txt | uniq -c

最も頻繁な結果を一番上に表示するには (Peter Jaric に感謝):

sort ips.txt | uniq -c | sort -bgr
于 2013-04-13T05:04:20.673 に答える