Buenas:
Me estoy iniciando en Python, seguí varias guías pero al final siempre se me olvida casi todo lo que aprendo así que quiero aplicarlo a algo real para practicar.
Me llamo Dani y soy técnico de sistemas acostumbrado a programar cosillas sencillas en C, java, powershell y scripts CMD. Ahora me he planteado un reto más grande. Tengo un log que ocupa la friolera de 1,5 GB que importo a un Access para hacer datamining y obtener consultas y estadísticas. El problema es que hace meses, debido a una actualización, esos logs no solo crecen en demasía sino que modifica la estructura y ya no puedo importar las columnas por tabulación sino que tengo que hacer magia...
Los logs, vienen de esta guisa: ...src_port=56663 src_int="port1"..., con lo que simplemente elimino las comillas dobles y los espacios los convierto por punto y coma para luego importarlo a Access. El problema viene por dos cosas, la primera es que ocupa mucho y no lo puedo hacer los reemplazos ni con wordpad, notepad++, etc, y el segundo es que algunas filas, tienen un este tipo ...src_port=56663 src_int="port1" country="United States"... con lo que el espacio del país lo sustituye por punto y coma y ya no cuatra en el access con lo que no se puede importar correctamente en cada columna.
Aunque lo podría hacer con java, mi idea era hacerlo con python para aprovechar y desoxidar mis conocimientos...
Para el tema del tamaño del archivo pensaba partirlo en tres de 500 MB cada uno.
Para el tema del espacio de las palabras dentro de las comillar, creo que puedo recorrer el documento sin hacer nada hasta encontrar unas comillas dobles y cuando esto ocurra, recorrer caracter por caracter hasta llegar a dos situaciones: 1.- Encuentra un espacio = Lo borra. 2.- Encuentra otra comillas doble = deja de recorrer caracter por caracter y vuelve a buscar la siguiente comillas dobles.
¿Alguien me puede echar una mano?
El archivo de texto tiene miles de filas como esta cada una dice algo relacionado con un evento de un firewall.
Este es el log:
2013-12-30 23:50:26 Local7.Warning 10.55.15.55 date=2013-12-30 time=23:50:21 devname=FG900D device_id=FG900D log_id=0038000007 type=traffic subtype=other pri=warning vd=root src=66.1.1.3 src_port=37751 src_int="wan1" dst=88.20.1.3 dst_port=25 dst_int="dmz" SN=5427 status=deny policyid=26 dst_country="Spain" src_country="United States" service=SMTP proto=6 duration=8784300 sent=0 rcvd=0 msg="replay packet(allow_err), drop"
2013-12-30 23:50:32 Local7.Warning 10.55.15.55 date=2013-12-30 time=23:50:29 devname=FG900D device_id=FG900D log_id=0038000007 type=traffic subtype=other pri=warning vd=root src=172.28.5.100 src_port=33012 src_int="dmz" dst=88.20.1.3 dst_port=80 dst_int=unknown-0 SN=0 status=deny policyid=0 dst_country="Germany" src_country="Reserved" service=HTTP proto=6 duration=8784305 sent=0 rcvd=0 msg="no session matched"
2013-12-30 23:50:34 Local7.Warning 10.55.15.55 date=2013-12-30 time=23:50:34 devname=FG900D device_id=FG900D log_id=0038000007 type=traffic subtype=other pri=warning vd=root src=172.28.5.100 src_port=48109 src_int="dmz" dst=88.20.1.3 dst_port=80 dst_int=unknown-0 SN=0 status=deny policyid=0 dst_country="Germany" src_country="Reserved" service=HTTP proto=6 duration=8784308 sent=0 rcvd=0 msg="no session matched"
2013-12-30 23:50:41 Local7.Warning 10.55.15.55 date=2013-12-30 time=23:50:40 devname=FG900D device_id=FG900D log_id=0038000007 type=traffic subtype=other pri=warning vd=root src=77.2.1.200 src_port=34631 src_int="wan1" dst=88.20.1.3 dst_port=25 dst_int="dmz" SN=5480 status=deny policyid=26 dst_country="Spain" src_country="United States" service=SMTP proto=6 duration=8784315 sent=0 rcvd=0 msg="replay packet(allow_err), drop"
2013-12-30 23:50:43 Local7.Warning 10.55.15.55 date=2013-12-30 time=23:50:43 devname=FG900D device_id=FG900D log_id=0038000007 type=traffic subtype=other pri=warning vd=root src=10.55.1.156 src_port=60614 src_int="port1" dst=88.20.1.3 dst_port=25 dst_int="dmz" SN=5489 status=deny policyid=26 dst_country="Spain" src_country="Reserved" service=SMTP proto=6 duration=8784317 sent=0 rcvd=0 msg="replay packet(allow_err), drop"
Saludos
Dani