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

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

Re: [shell-script] Separar Colunas com quantidade incerta


From: Tiago Peczenyj
Subject: Re: [shell-script] Separar Colunas com quantidade incerta
Date: Tue, 12 Jul 2011 13:22:12 -0300

usar o awk para pegar o numero ou o resultado é simples

$ cat x
170.00259604/3 JOSE LUIZ MOREIRA 10,00 1,00 11,00 24,00 46,00 ELIMINADO 4.1.9

$ awk '{print $1}' x
170.00259604/3

$ awk '{print $(NF-1)}' x
ELIMINADO

onde NF é o numero de campos (fields) no caso do resultado, é o
penultimo campo, ou seja, NF -1

para pegar o nome, tem uma pegadinha. se não for separado por ; e não
tem uma quantidade fixa de caracteres, pode ser feito isto:

awk '{ match($0,/[A-Z][A-Z ]+/); print substr($0,RSTART,RLENGTH) }' x

o que é feio, sed pode fazer isto um pouco melhor.

2011/7/12 Jonathan Lessa <address@hidden>:
> Com o sed você consegue sim, basta delimitar os padrões, neste caso vc cria
> grupos:
> num = (do inicio até o primeiro espaço em branco)
> Nome = (o que vem depois do 'num') ou (o que se inicia com uma letra) até um
> espaço seguido de um número
> as notas = numero com 1 ou 2 digitos seguidos de uma virgula e com mais dois
> digitos
> resultado = (tudo depois das notas) ou (o que tem um número seguido de um
> espaço) seguido de uma letra até o final da linha
>
> Ex.:
> $ linha="170.00259604/3 JOSE LUIZ MOREIRA 10,00 1,00 11,00 24,00 46,00
> ELIMINADO 4.1.9"
>
> $ num=$(echo $linha | sed -r 's/(^.*\/[0-9]) ([a-zA-Z].*)
> ([0-9]{1,2},[0-9]{2}) ([0-9]{1,2},[0-9]{2}) ([0-9]{1,2},[0-9]{2})
> ([0-9]{1,2},[0-9]{2}) ([0-9]{1,2},[0-9]{2}) ([a-zA-Z].*$)/\1/g')
>
> $ nome=$(echo $linha | sed -r 's/(^[0-9].*\/[0-9]) ([a-zA-Z].*)
> ([0-9]{1,2},[0-9]{2}) ([0-9]{1,2},[0-9]{2}) ([0-9]{1,2},[0-9]{2})
> ([0-9]{1,2},[0-9]{2}) ([0-9]{1,2},[0-9]{2}) ([a-zA-Z].*$)/\2/g')
>
> $ echo $num
> 170.00259604/3
>
> $ echo $nome
> JOSE LUIZ MOREIRA
>
> $ echo $resultado
> ELIMINADO 4.1.9
>
>
> Se quiser separar as notas e diminur a linha de comando pode usar:
>
> $ notas=$(echo $linha | sed -r 's/(^.*\/[0-9]) ([a-zA-Z].*[a-zA-Z])
> ([0-9]{1,2},[0-9]{2} .*) ([a-zA-Z].*$)/\3/g')
>
>
> Ps.: Não posto em AWK pq ainda não estou familiarizado com o mesmo
>
> Att.:
> Jonathan Lessa
> Em 12 de julho de 2011 11:47, César Vianna <address@hidden>escreveu:
>
>> **
>>
>>
>> Caros, tenho que separar as seguintes colunas em um arquivo no padrão
>> abaixo.
>>
>> O problema é que os nomes tem quantidades de palavras diferentes. Daí não
>> dá
>> pra usar o cut e não consegui fazer uma regexp pro sed.
>>
>> O padrão é:
>> num;nome;nota1;2;3;4;5;resultado
>>
>> 170.00259604/3 JOSE LUIZ MOREIRA 10,00 1,00 11,00 24,00 46,00 ELIMINADO
>> 4.1.9
>> 170.00285361/7 JOSELIO RICARDO NUNES COELHO 6,00 0,00 4,00 9,00 19,00
>> ELIMINADO 4.1.9
>> 170.00242788/9 JULIANO DA SILVA CHAVES 8,00 1,00 7,00 21,00 37,00 ELIMINADO
>> 4.1.9
>> 170.00254924/0 LEANDRO DO NASCIMENTO SAMORA 8,00 2,00 9,00 30,00 49,00
>> ELIMINADO 4.1.9
>> 170.00263869/8 MARCELA GOUVEIA FERRAZ 10,00 5,00 6,00 9,00 30,00 ELIMINADO
>> 4.1.9
>> 170.00237205/9 MARCELO ALVES DRUMMOND DE OLIVEIRA 12,00 4,00 5,00 42,00
>> 63,00 HABILITADO ITEM 4.3.3
>> 170.00239439/7 MARCOS ANTONIO LIMA 8,00 3,00 3,00 12,00 26,00 ELIMINADO
>> 4.1.9
>> 170.00240727/2 MARINA DE OLIVEIRA PEREIRA 10,00 1,00 1,00 9,00 21,00
>> ELIMINADO 4.1.9
>> 170.00283022/0 MEI YUNG KO 10,00 3,00 6,00 9,00 28,00 ELIMINADO 4.1.9
>> 170.00261006/2 PHILIP TEIXEIRA ROCHA 8,00 1,00 6,00 15,00 30,00 ELIMINADO
>> 4.1.9
>> 170.00265535/0 RODRIGO JOSE BUENO 12,00 1,00 7,00 3,00 23,00 ELIMINADO
>> 4.1.9
>> 170.00280447/0 SIRLANE DE ARAUJO CAMURCA FERNANDES 10,00 3,00 6,00 24,00
>> 43,00 ELIMINADO 4.1.9
>> 170.00237871/9 VALDECI ANTONIO DE SOUZA 2,00 2,00 4,00 18,00 26,00
>> ELIMINADO
>> 4.1.9
>> 170.00252405/5 WAGNER ALVES RIBEIRO MAIA 16,00 5,00 6,00 33,00 60,00
>> HABILITADO ITEM 4.3.3
>> 170.00266490/0 ABELARDO DE JESUS 6,00 2,00 3,00 18,00 29,00 ELIMINADO 4.1.9
>> 170.00252228/6 ABNER AUGUSTO VIANA THOMAZ 6,00 3,00 3,00 24,00 36,00
>> ELIMINADO 4.1.9
>> 170.00271565/4 ABNER VISCONTI VIEIRA 8,00 3,00 10,00 30,00 51,00 ELIMINADO
>> 4.3.4
>>
>> Abraço,
>> --
>> César Vianna
>> -------------------
>> Prefira o que é positivo e múltiplo; a diferença à uniformidade; o fluxo às
>> unidades; os agenciamentos móveis aos sistemas.
>> Gilles Deleuze & Felix Guattari
>> ******************************************************
>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>>
>>
>
>
>
> --
> Att.:
> Jonathan Lessa
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como 
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br


reply via email to

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