[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Último token em uma linha
From: |
Tiago Barcellos Peczenyj |
Subject: |
Re: [shell-script] Último token em uma linha |
Date: |
Tue, 13 Mar 2007 11:09:29 -0300 |
Bruno, vc testou a saída desse comando ?
Não vai funcionar por 2 motivos
1) o awk precisa de alguma fonte de informação, como não há pipe para ele
nem arquivo, ele fica parado esperando entrar dados pela entrada padrão
2) o let, nesse contexto, não faz sentido. (ficaria tudo 1)
o proprio awk da conta do recado
awk '{print $1"."$NF}' arquivo
se vc quisesse fazer um laço, seria interessante vc usar while
I) cat arquivo | while read nome ; do echo $nome | awk ... ; done
II) while read nome ; do echo $nome | awk ... done < arquivo
para usar o for, vc teria que alterar a variavel IFS
( IFS=$'\n' ; for i in `cat arquivo`; do echo $i ; done; )
coloquei os () para não alterar o valor da IFS corrente, assim roda tudo em
um subshell.
para usar o let, nesse contexto, ou alguma variavel numerica que vai sendo
incrementada, seria mais logico vc fazer uso de arrays
$ ( IFS=$'\n' NOMES=($(cat arquivo)) ; echo "um array com ${#NOMES[@]}
elementos" )
um array com 3 elementos
ou então fazer uso do head/tail ou awk ou sed para imprimir uma determinada
linha do arquivo.
em todos os casos, o awk le o arquivo de entrada e trata dos dados
facilmente (sem falar em performance), sem necessidade de maiores
malabarismos, entretanto se vc precisa fazer mais alguma coisa com os dados,
um laço no shell pode ser uma solução simples!
(( tudo isso e muito mais vcs poderão ver no curso de shell script/ awk
/etc for crazy people no site do CentOSBr)
( e logo teremos ferramentas web usando estes recursos made in Brazil!))
( humm (isso (lembra (lisp $(mas sao subshells)))))
Abraços
On 3/13/07, Bruno Gunter Fricke <address@hidden> wrote:
>
> Pode completar com um for... Do tipo
>
> $ for i in `cat arquivo`; do let i++; awk '{print $1"."$NF}'; done;
>
> On Tue, 2007-03-13 at 09:42 -0300, Tiago Barcellos Peczenyj wrote:
> > Pense em AWK
> >
> > $ echo 'CAROLINA DE FREITAS SCHUINDT' | awk '{print $1"."$NF}'
> > CAROLINA.SCHUINDT
> >
> > $ echo 'CAROLINA DE FREITAS SCHUINDT' | awk '{print
> > tolower($1"."$NF)}'
> > carolina.schuindt
> >
> > claro que pode ser feito em sed e outras ferramentas também
> >
> > T
> >
> > On 3/13/07, Edmilson Santana (listas)
> > <address@hidden<edmilson.listas%40superig.com.br>
> >
> > wrote:
> > >
> > > Pessoal,
> > >
> > > Bom dia, estou querendo gerar uma listas de logins no formato
> > > <nome>.<ultimo nome>.
> > >
> > > Meu arquivo de entrada é no formato:
> > >
> > > ALEXANDRE VAZ DE ALMEIDA
> > > CAIO MOREIRA VAN DEURSEN
> > > CAROLINA DE FREITAS SCHUINDT
> > > .
> > > .
> > > .
> > >
> > > Alguma idéia ?
> > >
> > > []'s
> > >
> > > Edmilson Santana
> > >
> > >
> >
> > --
> > Tiago B Peczenyj
> > Linux User #405772
> >
> > # cd /pub
> > # more beer
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
> >
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
--
Tiago B Peczenyj
Linux User #405772
# cd /pub
# more beer
[As partes desta mensagem que não continham texto foram removidas]