3
Bash Script: นับบรรทัดที่ไม่ซ้ำกันในไฟล์
สถานการณ์: ฉันมีไฟล์ขนาดใหญ่ (หลายล้านบรรทัด) ที่มีที่อยู่ 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 จากนั้นฉันสามารถใช้ regex ที่ค่อนข้างง่ายเพื่อขูดที่อยู่ IP ทั้งหมดที่ส่งมาจากที่อยู่ของฉัน (ซึ่งฉันไม่สนใจ) จากนั้นฉันสามารถใช้สิ่งต่อไปนี้เพื่อแยกรายการที่ไม่ซ้ำกัน: sort -u ips.txt > intermediate.txt ฉันไม่รู้ว่าฉันจะรวมการนับบรรทัดด้วยการเรียงลำดับอย่างไร
129
bash