Tình hình:
Tôi có một tệp lớn (hàng triệu dòng) chứa địa chỉ IP và cổng từ một lần chụp mạng vài giờ, một ip / cổng trên mỗi dòng. Các dòng có định dạng này:
ip.ad.dre.ss[:port]
Kết quả như ý:
Có một mục nhập cho mỗi gói tôi nhận được khi đăng nhập, vì vậy có rất nhiều địa chỉ trùng lặp. Tôi muốn có thể chạy nó thông qua một tập lệnh shell nào đó để có thể giảm nó thành các dòng có định dạng
ip.ad.dre.ss[:port] count
nơi count
là số lần xuất hiện của địa chỉ cụ thể (và cảng). Không có công việc đặc biệt phải được thực hiện, coi các cổng khác nhau như các địa chỉ khác nhau.
Cho đến nay, tôi đang sử dụng lệnh này để cạo tất cả các địa chỉ IP từ tệp nhật ký:
grep -o -E [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(:[0-9]+)? ip_traffic-1.log > ips.txt
Từ đó, tôi có thể sử dụng một regex khá đơn giản để loại bỏ tất cả các địa chỉ IP được gửi bởi địa chỉ của tôi (mà tôi không quan tâm)
Sau đó tôi có thể sử dụng các mục sau để trích xuất các mục duy nhất:
sort -u ips.txt > intermediate.txt
Tôi không biết làm thế nào tôi có thể tổng hợp các dòng đếm bằng cách nào đó với sắp xếp.
-bgr
trùng hợp trông giống như một người ghi nhớ chobigger
, đó là những gì chúng ta muốn ở đầu.