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

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

Re: [shell-script] Preencher campos com dados das linhas superiores


From: Enio Onodera
Subject: Re: [shell-script] Preencher campos com dados das linhas superiores
Date: Mon, 2 May 2011 14:35:21 -0700 (PDT)

Bom, não sou mto bom pra explicar as coisas... mas vamos tentar, qlq coisa vc 
pergunta de novo... =)
IFS tem q ser algo q nunca vá aparecer no seu arquivo, senão pode dar problema 
na hora de tratá-lo... como eu não sei quais caracteres podem aparecer no seu 
arquivo, eu presumi que ² seria algo q nunca apareceria... pode substituir por 
outro caractere, só tem q ter certeza q não vai aparecer no arquivo...
O script pega cada linha do arquivo e verifica se começa com número, se 
começar, ele reserva, na variável np, tudo que aparecer até o segundo 
delimitador (nesse caso ";" - repare que trabalhar com delimitador é diferente 
de trabalhar com coluna) e imprime em tela a linha. Se a linha não começar com 
número, ele substitui o primeiro ; pelo valor que está reservado na variável 
np... o próprio sed se encarrega de imprimir o resultado em tela.
Esse comandos que usei trabalham com arquivos ou recebendo saída de outros 
comandos usando pipe... se vc usar simplesmente grep ^[0-9] $a, o $a será 
expandido e o grep vai entender q o conteúdo de $a é um arquivo, logo, não irá 
encontrar nada e irá apresentar erro... para resolver isso, geralmente é usado 
echo "$a" | grep ^[0-9], mas como eu fiquei com preguiça de digitar "echo "$a" 
|" toda hora, eu usei o <<< que é equivalente e mais rápido....
Se quiser substituir alguns comandos/parametros e ver como cada um se comporta, 
substitua e execute "bash -x script" 

Se alguém da lista notar algum erro na explicação ou no script, por favor, 
corrijam.
Abs,Enio Onodera
--- Em seg, 2/5/11, Robson Alexandre <address@hidden> escreveu:

De: Robson Alexandre <address@hidden>
Assunto: Re: [shell-script] Preencher campos com dados das linhas superiores
Para: address@hidden
Cc: address@hidden
Data: Segunda-feira, 2 de Maio de 2011, 13:45

Valeu Enio
Muito bom..... perfeitamente.

Mas deixa eu entender;

IFS seria o Field separator. Pq vc poe ²?
dai vc pega as linhas que começam com numeros da um cut nas duas primeiras 
colunas e substitui com o sed nas linhas que começam com ;

E este redirecionamento "<<<"?? como funciona


Agradeço pela ajuda
Abraços

Em 29 de abril de 2011 19:10, Enio Onodera <address@hidden> escreveu:
















 



  


    
      
      
      Robson,

teste isso, se funcionar, faça suas implementações (saída, condições, etc):

#################################!/bin/bashIFS=²; while read a in ;do [ $(grep 
^[0-9] <<< $a) ] && np=`cut -d ';' -f-2 <<< $a` && echo $a || sed "s/^;/$np/" 
<<< $a; done < arquivo################################


Está tudo em uma linha só pq geralmente sai bagunçado quando mando.

Abs,Enio Onodera



--- Em sex, 29/4/11, Robson Alexandre <address@hidden> escreveu:



De: Robson

 Alexandre <address@hidden>

Assunto: [shell-script] Preencher campos com dados das linhas superiores

Para: 

Data: Sexta-feira, 29 de Abril de 2011, 17:05



 



Boa Tarde amigos,



tenho um arquivo nestas condições



1294234;"NOME SOBRENOME 1 ";2011;10;03/01/11;1



;;20;04/07/11;2



1477491;"NOME SOBRENOME 2 ";2011;10;11/04/11;1



;;10;04/07/11;2



;;10;03/11/11;3



1294099;"NOME SOBRENOME 3 ";2011;30;24/01/11;1



1517005;"NOME SOBRENOME 4 ";2011;10;31/01/11;1



;;10;11/07/11;2



;;10;31/12/11;3



173130;"NOME SOBRENOME 5 ";2011;10;03/01/11;1



;;20;05/12/11;2



onde o ultimo campo seria o numero da parcela, onde podemos ter 1, 2 ou 3



parcelas.



As linhas subsequentes abaixo de onde temos o nome das pessoas tambem devem



ser preenchidas com seu



respectivo nome da linha superior (2 primeiros campos)



e gostaria de modificá-lo para que ficasse na seguinte situação



1294234;"NOME SOBRENOME 1 ";2011;10;03/01/11;1



1294234;"NOME SOBRENOME 1 ";20;04/07/11;2



1477491;"NOME SOBRENOME 2 ";2011;10;11/04/11;1



1477491;"NOME SOBRENOME 2 ";10;04/07/11;2



1477491;"NOME SOBRENOME 2 ";10;03/11/11;3



1294099;"NOME SOBRENOME 3 ";2011;30;24/01/11;1



1517005;"NOME SOBRENOME 4 ";2011;10;31/01/11;1



1517005;"NOME SOBRENOME 4 ";10;11/07/11;2



1517005;"NOME SOBRENOME 4 ";10;31/12/11;3



173130;"NOME SOBRENOME 5 ";2011;10;03/01/11;1



173130;"NOME SOBRENOME 5 ";20;05/12/11;2



a duvida é a seguinte:



como tratamos de uma ordem aleatoria de parcelas hora 1, hora 2, hora 3



parcelas como poderia utilizar o sed/awk para resolver tal problema?



desde ja agradeço a atenção dos senhores.



Robson Alexandre



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



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





    
     

    
    






  










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



reply via email to

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