[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]