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

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

Re: [shell-script] Re: For com duas variaveis


From: Julio C. Neves
Subject: Re: [shell-script] Re: For com duas variaveis
Date: Wed, 30 Sep 2009 09:40:24 -0300

Vamos analisar as diferentes forma de fazer isso (apesar de achar que a
primeira [here strings] e terceira [substituição de processos] formas não
funcionam sob AIX + ksh):

$ echo $teste{1..4}
Arroz Feijao Marcarrao Farofa
$ while read VAR1 VAR2 ; do echo "Var1=$VAR1 Var2=$VAR2"; done <<< "$teste1
$teste2 $teste3 $teste4"
Var1=Arroz Var2=Feijao Marcarrao Farofa
$ echo $teste1 $teste2 $teste3 $teste4 | while read VAR1 VAR2 ; do echo
"Var1=$VAR1 Var2=$VAR2"; done
Var1=Arroz Var2=Feijao Marcarrao Farofa
$ while read VAR1 VAR2 ; do echo "Var1=$VAR1 Var2=$VAR2"; done < <(echo
"$teste1 $teste2 $teste3 $teste4")
Var1=Arroz Var2=Feijao Marcarrao Farofa

Até aqui, como vc viu, var1 recebeu Arroz e var2 recebeu o resto. Isso se
deve à uma excelente propriedade do read que vc pode entender melhor lendo
este 
texto<https://wiki.softwarelivre.org/TWikiBar/TWikiBarPapo007#E_agora_podemos_ler_os_dados_da>
.

Para conseguir fazer o que eu acho que vc quer, é preciso passar de 2 em 2
parâmetros para o read, e para isso, o melhor é usar o xargs, cuja saída
default é o cmd echo. Vc pode obter muito mais informações sobre este super
potente cmd, lendo este
texto<https://twiki.softwarelivre.org/bin/view/TWikiBar/TWikiBarBirinaite>.
Veja então como ficaria:

$ echo "$teste1 $teste2 $teste3 $teste4" | xargs -n2 | while read VAR1 VAR2
; do echo "Var1=$VAR1 Var2=$VAR2"; done
Var1=Arroz Var2=Feijao
Var1=Marcarrao Var2=Farofa

Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11) 2125-4747;
- Em DF ligue (61) 3223-3000 (próxima turma de 1 a 4/10);
- No RJ ligue (21) 2561-0867;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.


2009/9/29 fsilva6 <address@hidden>

>
>
> Galera,
> pintou uma duvida relativamente simples, mas que infelizmente não fui capaz
> de soluciona-la. Alguém que já passou por isso poderia me ajudar.
> Estou executando o comado abaixo no AIX, mas não estou obtendo sucesso o
> script não consegue identificar os simbolos "<<".
>
> $teste1=Arroz
> $teste2=Feijao
> $teste3=Marcarrao
> $teste4=Farofa
>
> while read VAR1 VAR2 ; do
> echo "Var1=$VAR1 Var2=$VAR2"
> done <<`echo "$teste1 $teste2
> $teste3 $teste4"`
>
> Tomei como base o script postado pelo colega no topico anterior mas quando
> tento obter as informações de uma variavel o script abenda. Vale lembrar que
> isso é uma curiosidade, pois acho muito interessante um loop com duas
> vairaveis.
>
> Efetuei alguns teste como o apresentado abaixo e obtive sucesso.
>
> while read cliente telefone ;do
> echo "$cliente $telefone ";
> done < telefone_cliente.csv
>
> ----------------------------------------------------------
>
> --- Em address@hidden <shell-script%40yahoogrupos.com.br>,
> "box_ferrari" <boxferrari@...> escreveu
> >
> > --- Em address@hidden<shell-script%40yahoogrupos.com.br>,
> Breno Moiana <breno.moiana@> escreveu
> > >
> > > Assim?
> > >
> > > $ for x in a b c d; do for y in 1 2 3 4; do echo "x=$x, y=$y";done;done
> > > x=a, y=1
> > > x=a, y=2
> > > x=a, y=3
> > > x=a, y=4
> > > x=b, y=1
> > > x=b, y=2
> > > x=b, y=3
> > > x=b, y=4
> > > x=c, y=1
> > > x=c, y=2
> > > x=c, y=3
> > > x=c, y=4
> > > x=d, y=1
> > > x=d, y=2
> > > x=d, y=3
> > > x=d, y=4
> > >
> > >
> > >
> > > Breno.
> > > --
> > >
> >
> > Laço? Tem que ser um for? Não pode ser um while?
> >
> > Tipo assim:
> >
> >
> > while read VAR1 VAR2 ; do
> > echo "Var1=$VAR1 Var2=$VAR2"
> > done < <(echo 'v1 v2
> > v3 v4
> > v5 v6')
> >
> > Var1=v1 Var2=v2
> > Var1=v3 Var2=v4
> > Var1=v5 Var2=v6
> >
> > * note que depois de v2, v4 e v6, há uma quebra de linha.
> >
> > No exemplo, usei um echo, mas suponha que você tenha um arquivo com 2
> colunas e várias linhas, exemplo, uma relação de nomes e CPF's e queira
> fazer um, digamos assim, "for", com cada linha usando ambas as informações,
> nome e CPF, você pode usar o comando assim
> >
> > cristiano@mga0-fwall-dsl:~> cat lista.txt
> > 1var_A 1var_B
> > 2var_A 2var_B
> > 3var_A 3var_B
> > 4var_A 4var_B
> > 5var_A 5var_B
> > 6var_A 6var_B
> > 7var_A 7var_B
> > 8var_A 8var_B
> > 9var_A 9var_B
> >
> > cristiano@mga0-fwall-dsl:~> while read NOME CPF ; do echo "Nome=$NOME
> CPF=$CPF" ; done < lista.txt
> > Nome=1var_A CPF=1var_B
> > Nome=2var_A CPF=2var_B
> > Nome=3var_A CPF=3var_B
> > Nome=4var_A CPF=4var_B
> > Nome=5var_A CPF=5var_B
> > Nome=6var_A CPF=6var_B
> > Nome=7var_A CPF=7var_B
> > Nome=8var_A CPF=8var_B
> > Nome=9var_A CPF=9var_B
> >
> > Era isso que você queria ou eu viajei?
> >
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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