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

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

Re: [shell-script] Último token em uma linha


From: Julio C. Neves
Subject: Re: [shell-script] Último token em uma linha
Date: Tue, 13 Mar 2007 16:16:39 -0300

Sempre digo:
- Nunca pergunte se dá para fazer em Shell. Pergunte qual a melhor maneira
para fazer em Shell.

E só por isso vou mandar mais uma usando arrays. Veja:

$ Nome=(CAROLINA DE FREITAS SCHUINDT)
$ echo ${Nome[${#Nome[@]}-1]}, ${Nome[0]}
SCHUINDT, CAROLINA

Não resisto. Só mais umazinha:

Nome="CAROLINA DE FREITAS SCHUINDT"
$ set - $Nome
$ eval echo \$$#, $1
SCHUINDT, CAROLINA

Abração,
Julio
:wq


Em 13/03/07, Edmilson Santana (listas) <address@hidden>
escreveu:
>
>   Cara, quanta informação !
> Valeu pelas dicas !!!
>
> Tiago Barcellos Peczenyj wrote:
> > 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<gunter%40infolink.com.br>>
> 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>
> <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]



reply via email to

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