1. ホーム
  2. bash

[解決済み] Bashスクリプト:ファイルのユニークな行を数える

2022-04-26 18:24:02

質問

シチュエーション

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

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

行数をなんとかsortで集計したいのですが、どうすればいいのかわかりません。

どのように解決するのですか?

を使用することができます。 uniq コマンドを使用すると、ソートされた繰り返し行の数を得ることができます。

sort ips.txt | uniq -c

最も頻度の高い結果をトップに表示するように(Peter Jaricに感謝)。

sort ips.txt | uniq -c | sort -bgr