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

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

Re: [shell-script] Registros multi-linha em arquivo texto, ou Delimitad


From: Flavio Junior
Subject: Re: [shell-script] Registros multi-linha em arquivo texto, ou Delimitadores de trecho de texto - parte II
Date: Fri, 3 Apr 2009 17:15:09 -0300

Achei q ia ser mais simples, depois fiquei com preguiça de jogar pra
um script...

Se preferir paste: http://rafb.net/p/PqQWHW14.html

Boa sorte na tradução :)

lazlo:~# cat blah
<exemplo>
Ficha: 01
Nome: Fulano
Resumo: blabla
Telefone: 44 xxxx-9460
E-mail: fulano@...
-----
Nome: Beltrano
Ficha:02
Resumo: blabla
Nome da mãe: Maria
Telefone: 44 xxxx-2534
-----
Resumo: blabla
Telefone: 44 xxxx-2300
Ficha: 03
Nome: Cicrano
Comida favorita: jabá com jerimum
E-mail: Cicrano@...
</exemplo>

lazlo:~# while IFS=$'\n' read -r LINHA; do if [[ "$LINHA" =~ "Nome:"
]]; then NOME="${LINHA/Nome:/}"; elif [[ "$LINHA" =~ "Telefone:" ]];
then FONE="${LINHA/Telefone:/}"; elif [[ "$LINHA" =~ "E-mail:" ]];
then MAIL="${LINHA/E-mail:/}";fi; if [[ "$LINHA" =~ "(/exemplo|-----)"
]]; then echo "X: $NOME $FONE $MAIL"; fi; done <blah
X:  Fulano  44 xxxx-9460  fulano@...
X:  Beltrano  44 xxxx-2534  fulano@...
X:  Cicrano  44 xxxx-2300  Cicrano@...


--

Flávio do Carmo Júnior aka waKKu

2009/4/3 Breno Moiana <address@hidden>:
> Boa tarde, lista.
>
> Algum tempo atrás, rodou na lista um estudo de caso [1] sobre um
> arquivo texto que continha registros que precisavam ser reorganizados.
>
> [1] http://br.groups.yahoo.com/group/shell-script/message/27782
>
> A estrutura do arquivo era a seguinte:
>
> <exemplo>
>
> Ficha: 01
> Nome: Fulano
> Resumo: blabla
> Telefone: 44 xxxx-9460
> E-mail: fulano@...
>
> -----
>
> Ficha:02
> Nome: Beltrano
> Resumo: blabla
> Telefone: 44 xxxx-2534 E-mail: beltrano@...
>
> -----
>
> Ficha: 03 Nome: Cicrano
> Resumo: blabla
> Telefone: 44 xxxx-2300
> E-mail: Cicrano@...
>
> </exemplo>
>
> O objetivo era reestruturar o arquivo em colunas de NOME, RESUMO, EMAIL,
> etc.
> Isso foi atingido com algumas propostas diferentes. Sed, Awk, grep+paste...
>
> A minha pergunta é:
> E como poderíamos fazer se os campos viessem embaralhados?
> Sempre teriamos um separador de registros, mas a ordem dos campos nao
> necessariamente é a mesma, e outros campos podem entrar.
>
> Proposta: extrair "NOME, EMAIL, TELEFONE" dos registros no arquivo texto
> abaixo.
> Note que os campos nao se repetem, e que um dos registros nao contem
> email, devendo retornar vazio. vamos estipular um "-" nesse caso.
> Entao, saída esperada:
>
> <saida>
> Fulano 44 xxxx-9460 fulano@...
> Beltrano 44 xxxx-2534 -
> Cicrano 44 xxxx-2300 Cicrano@...
> </saida>
>
> E a fonte de exemplo:
>
> <exemplo>
> Ficha: 01
> Nome: Fulano
> Resumo: blabla
> Telefone: 44 xxxx-9460
> E-mail: fulano@...
> -----
> Nome: Beltrano
> Ficha:02
> Resumo: blabla
> Nome da mãe: Maria
> Telefone: 44 xxxx-2534
> -----
> Resumo: blabla
> Telefone: 44 xxxx-2300
> Ficha: 03
> Nome: Cicrano
> Comida favorita: jabá com jerimum
> E-mail: Cicrano@...
> </exemplo>
>
> Ideias?
>
> abraco,
>
> Breno.
> --
>
> 


reply via email to

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