Perl - CAT

1. Perl - CAT

Maria Luiza
marialuizam

(usa Outra)

Enviado em 24/01/2012 - 13:17h

Olá, tenho o seguinte script: ele pega 3 arquivos que tenho num determinado diretorio, e renomea pra enviar no diretorio que estou.
como faço ele entrar nesse diretorio que quero e enviar para o que estou?

____________________________________________________________________________________________________________________________________________________

#!/usr/bin/perl

use Getopt::Std;


use vars qw($opt_t);

&getopts('t:') ||die "Erro: Nao existe essa opcao execute o programa seguindo o exemplo a seguir run_contagem_final -t synop\n";



if ( !$opt_t )
{
print "Entre com o Parametro t eo tipo correspondente.\n";
print "Exemplo: run_contagem_final.pl -t synop\n";
exit;
}


my $arquivo = $opt_t."_totalmes.txt";
my $arquivo2 = $opt_t."_mediames.txt";
my $arquivo3 = $opt_t."_totaldiario.txt";
my $type;

my $ano;


foreach $ano (2011..2011)
{
$type = $ano."_".$opt_t.".txt";
print "$type\n";
system("cat $ano/total_mensal_$opt_t.txt >> $arquivo");
system("cat $ano/$type >> $arquivo3");
system("cat $ano/media_mensal_$opt_t.txt >> $arquivo2");
}
~
~
~
_____________________________________________________________________________________________________________________________________________

att


  


2. Re: Perl - CAT

Daniel Vinciguerra
dvinciguerra

(usa Debian)

Enviado em 27/01/2012 - 00:41h

Desculpe mas não intendo que você que fazer... mas pelo que estou vendo em seu código: o sistema busca por um código/palavra (padrão) em um diretório e copia/move arquivos para outro.

Você tem que fazer um copy/move e não um system com cat, etc...
Isso var te ajudar!
File::Copy => http://perldoc.perl.org/File/Copy.html

Reveja a logica do seu loop que pode melhorar...
Caso queira copiar para um determinado diretório adicione o path nas linhas:
__Start__
my $arquivo = $opt_t."_totalmes.txt";
my $arquivo2 = $opt_t."_mediames.txt";
my $arquivo3 = $opt_t."_totaldiario.txt";
__End__

my $arquivo = "/path/to/copy/".$opt_t."_totalmes.txt";
my $arquivo2 = "/path/to/copy/".$opt_t."_mediames.txt";
my $arquivo3 = "/path/to/copy/".$opt_t."_totaldiario.txt";

No caso o diretório onde você esta pode ser obtido através do command "pwd".

Qualquer coisa só perguntar,

[]'s





3. Re: Perl - CAT

Maria Luiza
marialuizam

(usa Outra)

Enviado em 01/02/2012 - 08:54h

O script faz o seguinte, ele pega 3 arquivos onde só muda o ultimo nome, onde estao os opt, eu preciso incrementar o diretorio q ele tem q entrar para pegar.


4. Re: Perl - CAT

Daniel Vinciguerra
dvinciguerra

(usa Debian)

Enviado em 01/02/2012 - 10:33h


Ola...

__ START SCRIPT __
#!/usr/bin/perl

use Getopt::Std;
use vars qw($opt_t);

&getopts('t:') or die "Erro: Opcao nao existe! Execute o programa seguindo o exemplo: run_contagem_final -t synop\n";

unless( $opt_t ){
print "Entre com o Parametro 't' e o tipo correspondente.\n";
print "Exemplo: run_contagem_final.pl -t synop\n";
exit;
}

# nomes e diretórios para os arquivos de destino
my $arquivo = $opt_t."_totalmes.txt";
my $arquivo2 = $opt_t."_mediames.txt";
my $arquivo3 = $opt_t."_totaldiario.txt";

# efetua a cópia propriamete dita dos arquivos.
foreach my $ano (2011..2011) {
my $type = $ano."_".$opt_t.".txt";
print "$type\n";
system("cat $ano/total_mensal_$opt_t.txt >> $arquivo");
system("cat $ano/$type >> $arquivo3");
system("cat $ano/media_mensal_$opt_t.txt >> $arquivo2");
}

__ END SCRIPT__

Note que acima a cópia dos arquivos é feita dentro de um loop (foreach) que para mim não
serve para nada, pois roda sempre uma só vez e usa o identificador como nome do diretório.

Então para fazer o que você quer eu aconselho que este trecho seja mudado para:

# efetua a cópia propriamete dita dos arquivos.
my $type = "2011_".$opt_t.".txt";
print "$type\n";
system("mv /meu/diretorio/total_mensal_$opt_t.txt >> $arquivo");
system("mv /meu/diretorio/$type >> $arquivo3");
system("mv /meu/diretorio/media_mensal_$opt_t.txt >> $arquivo2");

No exemplo acima foi alterado o cat para o mv e o 2011 não faz mais referencia ao diretório
onde os arquivos estão mas sim o caminho antes dos nomes.

O script completo pode ser visto no link abaixo:
http://codepad.org/3etjza5d



5. Re: Perl - CAT

Maria Luiza
marialuizam

(usa Outra)

Enviado em 01/02/2012 - 10:40h

sim, mas o que acontece é que ele entra nesse diretorio renomea 3 arquivos que la tem e envia pra outro diretorio.
Ele ate faz isso, mas a informação de dentro desses 3 arquivos nao vao para a pasta. O arquivo fica em branco, o que pode ser?

att


6. Re: Perl - CAT

Daniel Vinciguerra
dvinciguerra

(usa Debian)

Enviado em 01/02/2012 - 11:14h

Perdão me confundi...
Você quer copiar o connteudo do arquivo para outro diretório... neste caso use o "cp" ao invés do "mv"
que havia dito.

Outra coisa que errei foi em não perceber o ">>" no comando... ele deveria ficar assim:

# efetua a cópia propriamete dita dos arquivos.
my $type = "2011_".$opt_t.".txt";
print "$type\n";
system("cp /meu/diretorio/total_mensal_$opt_t.txt $arquivo");
system("cp /meu/diretorio/$type $arquivo3");
system("cp /meu/diretorio/media_mensal_$opt_t.txt $arquivo2");

Ao invés do que disse no post acima.

Novamente peço desculpas pela confusão,

Atualização do script
http://codepad.org/9SWrV9tP






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts