Claudio Clemens wrote:
2003-09-19, 09:09 -0300, Julio Cesar de Magalhaes:
Pessoal eu tenho um arquivo de log com aproximadamente 7 milhoes de
linhas como as que seguem abaixo:
"17908596" "23Aug2003" "23:59:58" "FireWall-1" "qfe2" "firewall" "Log"
"Accept" "2967" "10.1.1.1" "servidor1" "udp" "10" "2967" "" ""
Estou internalizando esse log no postgres . Quando o arquivo é menor
consigo usar as expressoes regulares no vi e colocar o arquivo no
seguinte formato:
17908596;23Aug2003;23:59:58;FireWall-1;qfe2;firewall;Log;Accept;2967;10.1.1.1;servidor1;udp;10;2967;
; ;
O problema é que quando tento fazer a mesma coisa com esse arquivo de 7
milhoes de linhas não tenho resposta . Depois de 3 dias rodando quando
dou um top o mesmo apresenta o processo do vi com STAT D .
Alguem saberia me ajudar com uma expressão regular mais eficiente ou
mesmo alguma saída com o awk ou sed ?
segue minha expressão desastrosa:
vi -c '%s/" "/;/g' -c ':%s/..$/' -c '%s/^./' -c ':set fileformat=unix'
-c ':wq' 2003-1708a2308.txt
O que você quer fazer com
:%s/..$/
Apagar os 2 últimos caracteres de cada linha
e
%s/^./?
Apagar o Primeiro caracter de cada linha
Tenta com o sed. Acho que o vi tenta carregar o arquivo TODO na RAM, e o
sed processa linha por linha.
Até
Claudio
Consegui fazer o o perl ! Ficou infinitamente mais rápido, acho que o vi
carrega o arquivo todo em RAM mesmo .
Mas valeu
Abraços
Júlio