Soru Bash Script: dosyada benzersiz satırları saymak


Durum:

IP adresleri ve birkaç saatlik ağ yakalama bağlantı noktası içeren büyük bir dosyam (milyonlarca satır), her satırda bir ip / bağlantı noktası var. Çizgiler şu biçimdedir:

ip.ad.dre.ss[:port]

İstenen sonuç:

Giriş yaparken aldığım her paket için bir giriş var, bu nedenle çok sayıda yinelenen adres var. Bunu, biçimin satırlarına indirgeyebilecek bir tür kabuk betiği aracılığıyla yürütmek istiyorum.

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

nerede count Bu belirli adresin (ve bağlantı noktasının) oluşum sayısıdır. Özel bir iş yapılması gerekmiyor, farklı bağlantı noktalarını farklı adresler olarak ele al.

Şimdiye kadar, tüm ip adreslerini günlük dosyasından kazımak için bu komutu kullanıyorum:

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

Bu yüzden, adresimin gönderdiği tüm ip adreslerini kazıyarak çıkarmak için oldukça basit bir regex kullanabilirim (ki bu benim umurumda değil).

Benzersiz girdileri ayıklamak için aşağıdakileri kullanabilirim:

sort -u ips.txt > intermediate.txt

Hat sayımlarını nasıl bir şekilde çeşitlendirebileceğimi bilmiyorum.


76
2018-04-13 04:57


Menşei




Cevaplar:


Kullanabilirsiniz uniq sıralı tekrarlanan satırların sayısını almak için komut:

sort ips.txt | uniq -c

En sık en yüksek sonuçları almak için (Peter Jaric'e teşekkürler):

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

217
2018-04-13 05:04



Takip: Şimdi bunu her gün tam anlamıyla kullanıyorum. Onsuz nasıl hayatta kaldım. - Wug
Buraya oy vermek için geldim, ama zaten benim tarafımdan oy verildi. - Worker
En sık karşılaşılan sonuçları almak için başka bir sıralama ekleyin: sort ips.txt | uniq -c | sort -bgr - Peter Jaric
@PeterJaric: İyi öneri. Bunu düzenledim. - Michael Hoffman
Nasıl hoşlanıyorum -bgr tesadüfen bir anımsatıcıya benziyor biggerEn çok istediğimiz şey budur. - dwanderson