次の行を含むテキストファイルがあるとします。
192.168.1.1.55555
192.168.1.1.55555
192.168.1.1.5555
192.168.1.1.555
192.168.1.1.55
192.168.1.1.55
192.168.1.1.5
8.8.8.8.4433
8.8.8.8.443
8.8.8.8.443
8.8.8.8.25
192.168.1.2.99
上記のように、各行には次のパターンがあります(9.9599603594104e + 16個の可能な行があるため、可能なすべてのバリアントを作成することはできません)。
[number composed of 1 to 3 digits].[number composed of 1 to 3 digits].[number composed of 1 to 3 digits].[number composed of 1 to 3 digits].[number composed of 1 to 5 digits]
私は最初の4つの一致する数値行を計算し、その数を印刷するgrep / sortステートメントが必要です。
上記の例の予想結果は次のとおりです。
192.168.1.1 7
8.8.8.8 4
192.168.1.2 1
注:
出力をソートしようとしていますが、
netstat
実際に処理されている行はIPアドレスとポート番号です。uniq
私のUnixシステムではこれを行う必要がありますが、ツールはありませんcut
。 freebsdに基づいて構築されたいくつかのネットワーキングベンダーのオペレーティングシステムがあります。
この投稿のコメント作成者の一人が、次のことを使用するよう提案しました。
awk -F. '{c[$1 FS $2 FS $3 FS $4]++} END {for (i in c) print i, c[i]}'
これはうまくいくようです。
答え1
$ cut -d'.' -f1-4 file | uniq -c
7 192.168.1.1
4 8.8.8.8
1 192.168.1.2
または、入力が例に示すようにソートされていない場合、または出力列の順序が重要な場合:
$ cut -d'.' -f1-4 file | sort | uniq -c | awk '{print $2, $1}'
192.168.1.1 7
192.168.1.2 1
8.8.8.8 4