shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Edição e ordenação por data em arquivos Log


From: jimmy
Subject: Re: [shell-script] Edição e ordenação por data em arquivos Log
Date: Tue, 6 Dec 2011 18:22:38 -0200
User-agent: mutt-ng/devel-r804 (Linux)

On Tue, Dec 06, 2011 at 03:22:04PM -0200, ®i©@®ÐØ wrote:
> Pessoal segui a dica do Jimmy (Valeu Jimmy), e cheguei neste script:
>
> cat *www.log|awk -v A="" 'OFS=" " {A=$4} {print A, $1, $2, $3, $4, $5,
> $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20,
> $21, $22, $23, $24, $25, $26, $27,  $28, $29, $30, $31, $32, $33, $34,
> $35}'|sort
> >> juventude.log
> E  com a  ajuda do  MrBits (Valeu  Bits), cheguei  neste script:  echo
> [04/Dec/2011:06:19:21| tr -d '[/:'| date +%s
>
> Como posso integrar  os 2 scripts, substituindo o {A=$4}  do script #1
> pelo script #2? Algo do tipo: {A=$(echo $4| tr -d '[/:'| date +%s)}
>
> Tentei  fazer  o exemplo  acima,  mas  sempre  dá erro,  não  consegui
> proteger o sub-shell.
Parece que você confundiu as variáveis  e os mecanismos de atribuição do
awk  com os  do shell  e, dentro  do awk,  para capturar  a saída  de um
comando shell, você precisaria usar o getline, assumindo que está usando
o  gawk ou  uma  implementação  que suporte  esse  tipo  de recurso,  do
contrário, precisaremos mudar a abordagem da solução.

Mantendo o seu raciocínio com awk, podemos simplificar o problema da
seguinte forma:

    $ gawk '{"echo "$0"|tr -d '\''[/:'\''|date +%s" | getline t;
             print t,$0 }' www.log |
      sort|cut -d' ' -f2- > juventude.log

Podemos ainda eliminar o echo e o tr acima usando um expressão regular
para o FS do awk:

    $ gawk -F'[ []' '{"date +%s<<<"$5 | getline t;
                      print t, $0}' www.log |
      sort | cut -d ' ' -f2- > juventude.log

Você poderia fazer isso tudo em shell-script puro também, exemplo:

   while IFS=$IFS'[' read -a F; do
       t=$(date +%s <<< ${F[3]})
       echo "$t ${F[@]}"
   done < www.log | sort | cut -f2- > juventude.log
 

> Aguardo + ajuda da Lista. E todas as idéias são bem vindas.
> 
> Abraço
[...]

Outras abordagens de solução dependeriam do tipo de problema que tem, se
os arquivos são muito muito maiores  que a memória disponível, ou se são
menores, caso em  que seria possível fazer tudo em  memória e eliminar o
uso de alguns pipes.

[]'s
-- 
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
http://tecnoveneno.blogspot.com


reply via email to

[Prev in Thread] Current Thread [Next in Thread]