[Cascavel-pm] Ajuda prioridade if

Leonardo Ruoso leonardo em ruoso.com
Sexta Agosto 1 07:47:21 PDT 2014


Caro Leonardo,

Segue aí uma forma de fazer que acredito ser suficiente para boa parte dos
casos…

<code>
#!/usr/bin/perl
use autodie;
use common::sense;

my @arquivo = qw(arquivo1 arquivo2 arquivo3 );
$SIG{INT} = sub { close($arquivo[$_]) for (0..$#arquivo); exit(0); };

main();

sub main {
        my @pos_arquivo;
        open($arquivo[$_], '<', $arquivo[$_]) for (0..$#arquivo);
        TAIL: for (;;) {
                my $eof;
                my @linha_arquivo;
                $eof ||= eof($arquivo[$_]) for (0..$#arquivo);
                if ($eof) {
                   sleep 5;
                   seek($arquivo[$_], 0, 1) for (0..$#arquivo);
                   next TAIL;
                }
                $linha_arquivo[$_] = readline $arquivo[$_] for
(0..$#arquivo);
                my $output;
                for (0..$#arquivo) {
                        $output = $linha_arquivo[$_] if $linha_arquivo[$_]
=~ /CRITICO/;
                }
                        $output //= $linha_arquivo[0];
                print STDOUT $output;
              }
}
</code>





















Em 1 de agosto de 2014 10:50, Leonardo Ruoso <leonardo em ruoso.com> escreveu:

> Em 8 de julho de 2014 10:01, Leonardo Berbert Gomes <leoberbert em uol.com.br
> > escreveu:
>
> Amigos,
>>
>> Eu preciso da ajuda de vocês para tirar uma pequena dúvida:
>>
>> Eu tenho um arquivo que possui a ocorrência de duas strings.
>>
>> OK - Arquivos sendo incrementados normalmente
>> CRITICO - Arquivos não estão sendo incrementados.
>>
>> Como estou usando verificando muitos arquivos ao mesmo tempo, existem a
>> ocorrência tanto de OK quanto de crítico.
>>
>
> Cada linha corresponde a um registro de informação comum em vários
> arquivos diferentes de forma que um CRÍTICO na linha 23 sobrescreve um OK
> na linha 23 de outro arquivo?
>
>
>> Agora que vem a dúvida:
>>
>> * Eu preciso que a ocorrência da string CRITICO, tenha preferência sobre
>> o OK, tipo se eu tiver a ocorrência da string CRITICO, ele exiba as linhas
>> com a ocorrência de critico e não exiba as linhas OK.
>>
>
> Mas se tem OK para o mesmo número de linha para dois arquivos você mostra
> qualquer uma das linhas?
>
>
>> * Caso não encontre a ocorrência da string CRITICO, ele exiba a
>> ocorrência da string OK.
>>
>
> Como você sabe qual das duas deve exibir?
>
>
>>  Alguem tem alguma sugestão?
>>
>
> Os arquivos estão fechados para escrita quando você começa a processá-los
> ou são arquivos de log e você precisa emudar algo como tail -f em cada
> arquivo e mantê-los sincronizados?
>
> O que lhe impede de iterar indefinidamente num for (;;;) e ler linha a
> linha corrente de cada arquivo até que um dos arquivos acabe (ou todos os
> arquivos acabem?); Essa estragégia ainda habilitaria o processamento
> contínuo dos arquivos…
>
> _______________________________________________
>> Cascavel-pm mailing list
>> Cascavel-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/cascavel-pm
>>
>
>
>
> --
> Leonardo Ruoso
> Journalist, Perl developer and business consultant
> Media, UFC/2006; Telecom, IFCE/1998
>



-- 
Leonardo Ruoso
Journalist, Perl developer and business consultant
Media, UFC/2006; Telecom, IFCE/1998
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20140801/585dfb9f/attachment.html>


Mais detalhes sobre a lista de discussão Cascavel-pm