[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