Situación:
Tengo un archivo grande (millones de líneas) que contiene direcciones IP y puertos de una captura de red de varias horas, una ip / puerto por línea. Las líneas son de este formato:
ip.ad.dre.ss[:port]
Resultado deseado:
Hay una entrada para cada paquete que recibí al iniciar sesión, por lo que hay muchas direcciones duplicadas. Me gustaría poder ejecutar esto a través de un script de shell de algún tipo que pueda reducirlo a líneas del formato
ip.ad.dre.ss[:port] count
donde count
es el número de ocurrencias de esa dirección específica (y puerto). No hay que hacer ningún trabajo especial, trate los diferentes puertos como diferentes direcciones.
Hasta ahora, estoy usando este comando para eliminar todas las direcciones IP del archivo de registro:
grep -o -E [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(:[0-9]+)? ip_traffic-1.log > ips.txt
A partir de eso, puedo usar una expresión regular bastante simple para eliminar todas las direcciones IP que fueron enviadas por mi dirección (que no me importa)
Entonces puedo usar lo siguiente para extraer las entradas únicas:
sort -u ips.txt > intermediate.txt
No sé cómo puedo agregar los recuentos de líneas de alguna manera con sort.
-bgr
casualmente parece un mnemotécnicobigger
, que es lo que queremos en la parte superior.