From leonardo em ruoso.com Fri Aug 1 06:50:11 2014 From: leonardo em ruoso.com (Leonardo Ruoso) Date: Fri, 1 Aug 2014 10:50:11 -0300 Subject: [Cascavel-pm] Ajuda prioridade if In-Reply-To: <53bbeb97dbc24_40911c9c830160fe@a4-weasel17.mail> References: <53bbeb97dbc24_40911c9c830160fe@a4-weasel17.mail> Message-ID: Em 8 de julho de 2014 10:01, Leonardo Berbert Gomes 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 -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From leonardo em ruoso.com Fri Aug 1 07:47:21 2014 From: leonardo em ruoso.com (Leonardo Ruoso) Date: Fri, 1 Aug 2014 11:47:21 -0300 Subject: [Cascavel-pm] Ajuda prioridade if In-Reply-To: References: <53bbeb97dbc24_40911c9c830160fe@a4-weasel17.mail> Message-ID: Caro Leonardo, Segue aí uma forma de fazer que acredito ser suficiente para boa parte dos casos? #!/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; } } Em 1 de agosto de 2014 10:50, Leonardo Ruoso escreveu: > Em 8 de julho de 2014 10:01, Leonardo Berbert Gomes > 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: From leoberbert em uol.com.br Fri Aug 1 08:43:16 2014 From: leoberbert em uol.com.br (Leonardo Berbert Gomes) Date: Fri, 01 Aug 2014 12:43:16 -0300 Subject: [Cascavel-pm] Duvida Message-ID: <53dbb5947b413_58d85a30034508e8@a4-weasel1.mail> Um anexo em HTML foi limpo... URL: From renato.cron em gmail.com Fri Aug 1 08:50:31 2014 From: renato.cron em gmail.com (Renato Santos) Date: Fri, 1 Aug 2014 12:50:31 -0300 Subject: [Cascavel-pm] Duvida In-Reply-To: <53dbb5947b413_58d85a30034508e8@a4-weasel1.mail> References: <53dbb5947b413_58d85a30034508e8@a4-weasel1.mail> Message-ID: Crie um %HASH onde a chave é o PROC{XX} e faça que o valor seja o seu resultado ai em segundos. $HASH{$process} = $resp_time; Depois disso, você só precisa correr o keys %HASH Talvez, a ordem seja nessaria, e não possa ser ordenado usando sort keys %HASH, neste caso, você pode criar uma outra @ARRAY que você faz push @ARRAY, $process unless exists $HASH{$process}; Assim, apenas entra o item 1 vez na @ARRAY, na ordem 'de chegada'. ai você percorre essa lista e procura o valor no HASH. 2014-08-01 12:43 GMT-03:00 Leonardo Berbert Gomes : > Amigos, > > Tenho uma pequena duvida. Tenho o seguinte bloco de codigo abaixo: > > while ($final = ) { > chomp $final; > if ($final =~/Min|SDFCrtInvoice/) {next} > if ($final =~ /Avg\|.*/){ > $final =~s/ /;/g; > $final =~s/; /;/g; > $final =~s/ /;/g; > $final =~s/ \|;/;/g; > $final =~s/; /;/g; > $final =~s/\|;/;/g; > $final =~s/^ //g; > $final =~s/ /;/g; > my @fields = split /;/, $final; > my ($process, $resp_time) = @fields[0, 4]; > print "$process -> $resp_time\n"; > } > } > > Este codigo tra o resultado abaixo: > > PROC1 -> 5.70s > PROC1 -> 7.93s > PROC1 -> 5.56s > PROC2-> 85.6 > PROC2 -> 83.1 > PROC2 -> 87.1 > > Preciso exibir apenas a ultinha de cada processo da coluna 1. que no caso > seria: > > PROC1 -> 5.56s > PROC2 -> 87.1 > > Alguém consegue me ajudar? > > Att, > > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -- Saravá, Renato CRON http://www.renatocron.com/blog/ @renato_cron -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From leonardo em ruoso.com Fri Aug 1 09:22:03 2014 From: leonardo em ruoso.com (Leonardo Ruoso) Date: Fri, 1 Aug 2014 13:22:03 -0300 Subject: [Cascavel-pm] Ajuda prioridade if In-Reply-To: References: <53bbeb97dbc24_40911c9c830160fe@a4-weasel17.mail> Message-ID: Ou: https://gist.github.com/leonardoruoso/e21eae8603653dabfd93 Em 1 de agosto de 2014 11:47, Leonardo Ruoso escreveu: > Caro Leonardo, > > Segue aí uma forma de fazer que acredito ser suficiente para boa parte dos > casos? > > > #!/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; > } > } > > > > > > > > > > > > > > > > > > > > > > > Em 1 de agosto de 2014 10:50, Leonardo Ruoso > escreveu: > > Em 8 de julho de 2014 10:01, Leonardo Berbert Gomes > > 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 > -- Leonardo Ruoso Journalist, Perl developer and business consultant Media, UFC/2006; Telecom, IFCE/1998 -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From leonardo em ruoso.com Fri Aug 1 10:07:49 2014 From: leonardo em ruoso.com (Leonardo Ruoso) Date: Fri, 1 Aug 2014 14:07:49 -0300 Subject: [Cascavel-pm] Duvida In-Reply-To: <53dbb5947b413_58d85a30034508e8@a4-weasel1.mail> References: <53dbb5947b413_58d85a30034508e8@a4-weasel1.mail> Message-ID: Em 1 de agosto de 2014 12:43, Leonardo Berbert Gomes escreveu: > Amigos, > > Tenho uma pequena duvida. Tenho o seguinte bloco de codigo abaixo: > > while ($final = ) { > chomp $final; > if ($final =~/Min|SDFCrtInvoice/) {next} > if ($final =~ /Avg\|.*/){ > $final =~s/ /;/g; > $final =~s/; /;/g; > $final =~s/ /;/g; > $final =~s/ \|;/;/g; > $final =~s/; /;/g; > $final =~s/\|;/;/g; > $final =~s/^ //g; > $final =~s/ /;/g; > my @fields = split /;/, $final; > my ($process, $resp_time) = @fields[0, 4]; > print "$process -> $resp_time\n"; > } > } > > Este codigo tra o resultado abaixo: > > PROC1 -> 5.70s > PROC1 -> 7.93s > PROC1 -> 5.56s > PROC2-> 85.6 > PROC2 -> 83.1 > PROC2 -> 87.1 > > Preciso exibir apenas a ultinha de cada processo da coluna 1. que no caso > seria: > > PROC1 -> 5.56s > PROC2 -> 87.1 > > Alguém consegue me ajudar? > Usar um hash resolve, mas se forem arquivos grandes para processar valeria refazer a sequencia de regexp como uma única regexp, eliminar inclusive a primeira e fazê-la devidamente ancorada no início e no fim. Como sugestão, seria legal colocar o script num gist público e colocar uma sequencia de dados de teste/exemplo no __DATA__ [ http://perldoc.perl.org/perldata.html#Special-Literals] do arquivo para que a ajuda possa ser efetiva. Minha suspeita é que esse loop pode ficar um pouco mais elegante e robusto. > Att, > > > _______________________________________________ > 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 -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From renato.cron em gmail.com Fri Aug 1 10:21:42 2014 From: renato.cron em gmail.com (Renato Santos) Date: Fri, 1 Aug 2014 14:21:42 -0300 Subject: [Cascavel-pm] Duvida In-Reply-To: References: <53dbb5947b413_58d85a30034508e8@a4-weasel1.mail> Message-ID: Se RAM for um problema e o arquivo já estiver em ordem, da pra guardar a última linha e se ela for diferente da atual, você printar. Só n pode esquecer de fazer isso quando sair do loop também, pois pode existir uma linha sobrando no last. On Aug 1, 2014 2:08 PM, "Leonardo Ruoso" wrote: > Em 1 de agosto de 2014 12:43, Leonardo Berbert Gomes < > leoberbert em uol.com.br> escreveu: > >> Amigos, >> >> Tenho uma pequena duvida. Tenho o seguinte bloco de codigo abaixo: >> >> while ($final = ) { >> chomp $final; >> if ($final =~/Min|SDFCrtInvoice/) {next} >> if ($final =~ /Avg\|.*/){ >> $final =~s/ /;/g; >> $final =~s/; /;/g; >> $final =~s/ /;/g; >> $final =~s/ \|;/;/g; >> $final =~s/; /;/g; >> $final =~s/\|;/;/g; >> $final =~s/^ //g; >> $final =~s/ /;/g; >> my @fields = split /;/, $final; >> my ($process, $resp_time) = @fields[0, 4]; >> print "$process -> $resp_time\n"; >> } >> } >> >> Este codigo tra o resultado abaixo: >> >> PROC1 -> 5.70s >> PROC1 -> 7.93s >> PROC1 -> 5.56s >> PROC2-> 85.6 >> PROC2 -> 83.1 >> PROC2 -> 87.1 >> >> Preciso exibir apenas a ultinha de cada processo da coluna 1. que no caso >> seria: >> >> PROC1 -> 5.56s >> PROC2 -> 87.1 >> >> Alguém consegue me ajudar? >> > > Usar um hash resolve, mas se forem arquivos grandes para processar valeria > refazer a sequencia de regexp como uma única regexp, eliminar inclusive a > primeira e fazê-la devidamente ancorada no início e no fim. Como sugestão, > seria legal colocar o script num gist público e colocar uma sequencia de > dados de teste/exemplo no __DATA__ [ > http://perldoc.perl.org/perldata.html#Special-Literals] do arquivo para > que a ajuda possa ser efetiva. Minha suspeita é que esse loop pode ficar um > pouco mais elegante e robusto. > > > >> Att, >> >> >> _______________________________________________ >> 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 > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm em pm.org > http://mail.pm.org/mailman/listinfo/cascavel-pm > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: