[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: RES: RES: [shell-script] sed - substituir \n
From: |
SuSE List |
Subject: |
Re: RES: RES: [shell-script] sed - substituir \n |
Date: |
Tue, 07 Dec 2004 16:43:48 -0200 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.2) Gecko/20040803 |
Fala Julio!!!!
Que a força esteja com você! Beleza, vou retirar o mago, mas até o lado
negro da força tem medo do que você faz com shell... :-P
Bom, nosso amigo MrBits me ajudou pacas e conseguimos resolver meu
problema todo via shell mesmo.....nem preciso mais do meu arquivo de
carga .php..
esta clausula matou dois coelhos com uma unica flecha!
msptst2:/home/vinicius/pflog # mysql -uvinicius -psenha -e "LOAD DATA
INFILE '/home/vinicius/pflog/remetente.txt' IGNORE INTO TABLE
tb_remetente FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'
(msg_data,msg_hora,msg_id,msg_usuario,msg_dominio,msg_size,msg_nrcpt)"
pflogstats
Com o IGNORE da clausula, resolvemos os problemas que eu tinha com meus
PKs e com a clausula toda eu sumi com umas 40 linhas de php alem deste
método nao levar o "\n" junto com os campos....ehehehehe
Agora tá 10!!
[]s
Vinicius
Julio Cezar Neves - DATAPREVRJ wrote:
>Aê Vinícius,
>não vem com essa estória de mago que não cola! Mago é coisa de Paulo Coelho!
>Tô fora!!! :)))
>
>Falando sério: ainda não entendi o seu problema. Vamos aos fatos:
>
>1 - Sempre que vc extrair o new line vc fará uma tripa. Veja:
>Prompt> seq 9 | tr -d '\n'
>123456789
>
>2 - Vou fazer a mesma coisa que eu acho que vc querendo e não vejo nada de
>errado. Observe:
>Prompt> for ((i=1; i < 8; i++))
>
>
>>do
>>echo "2004-10-01;00:30:58;08ECA3936C;suse_list;mispo.com.br;cyrus;sent
>>
>>
>2004-10-01;00:39:11;B7D013936C;suse_list;mispo.com.br;cyrus;sent" |
>
>
>>cut -f$i -d';'
>>done | cat -vet
>>
>>
>2004-10-01$
>2004-10-01$
>00:30:58$
>00:39:11$
>08ECA3936C$
>B7D013936C$
>suse_list$
>suse_list$
>mispo.com.br$
>mispo.com.br$
>cyrus$
>cyrus$
>sent$
>sent$
>
>Repare que no exemplo acima coloquei 2 linhas (para vc ter certeza que
>existe um \n) que vc mesmo me passou e o resultado foi o esperado. Coloquei
>o cat -vet no final para que vc visse que todos os campos têm no final um
>new line, senão, como disse antes seria uma tripa.
>
>Amigo estou tentando ajudar, mas não estou atinando como. Me desculpe se
>estou ficando burro, acho que vou pintar os cabelos para disfarçar. :)
>
>:wq
>Julio Cezar Neves
>- Programa de Software Livre -
>Tel:+55 21 2528-7070 / +55 21 8112-9988
>Fax: +55 21 2528-7646
>mailto:address@hidden
>
>
>| -----Mensagem original-----
>| De: SuSE List [mailto:address@hidden]
>| Enviada em: segunda-feira, 6 de dezembro de 2004 23:17
>| Para: address@hidden
>| Assunto: Re: RES: [shell-script] sed - substituir \n
>|
>|
>|
>| Grande Mago Julio!!!!!
>|
>| Salve!!!!
>|
>| Usei seu comando e aparece apenas isso:
>|
>| 2004-11-02;19:20:24;15129464F9;suse_list;mispo.com.br;cyrus;sent$
>| 2004-11-02;19:20:59;2360C462FE;monica;luxury.com.br;cyrus;sent$
>| 2004-11-02;19:21:02;C7ECF4611D;josinaldo;techpower.com.br;cyrus;sent$
>|
>| O que eu quis passar foi o seguinte:
>|
>| Como eu tenho este arquivo, com estas entradas:
>|
>| 2004-10-01;00:30:58;08ECA3936C;suse_list;mispo.com.br;cyrus;sent
>| 2004-10-01;00:39:11;B7D013936C;suse_list;mispo.com.br;cyrus;sent
>|
>| Eu rodo um programa em php que separa campo a campo usando como IFS=;
>| ficando assim:
>|
>| c1 = 2004-10-01
>| c2 = 00:30:58
>| .....
>| c7 = sent
>|
>| Gravo isso num banco MySQL, até aqui ok.
>|
>| O problema é que, o ultimo campo, por ser final de linha, tem
>| o caracter
>| "\n" ou "$" como voce me mostrou com o parâmetro -vet do cat e não sei
>| porque, na hora que gravo no banco, o campo c7 esta levando
>| junto com o
>| conteudo da variável, no caso c7 = "sent", o caracter de final de
>| linha....eu tentei remover com o sed, usando 's/\n//g' mas
>| não obtive o
>| resultado esperado...o MrBits me deu um help com um script
>| maneiro...mas
>| acabei transformando meu arquivo com varias linhas num arquivo com uma
>| unica linha que "bagunçou" minha rotina de carga...fiquei com
>| algo assim:
>|
>| 2004-10-01;00:30:58;08ECA3936C;suse_list;mispo.com.br;cyrus;se
>| nt2004-10-01;00:39:11;B7D013936C;suse_list;mispo.com.br;cyrus;sent
>|
>| e estou com esta incognita...não consigo remover o caracter
>| "$" (new line)
>| sem perder minha formatação de arquivo (varias linhas
>| contendo 7 campos
>| por linha)
>|
>| O MrBits resolveu me dar um help em PVT, até para não sair do foco da
>| lista, como nós acabamos saindo...por isso peço desculpas a todos...
>|
>| em todo o caso, eu coloquei no meu shell que extrai as informações que
>| preciso de uma log de e-mail do postfix, que inserisse mais um ";" no
>| final de cada linha
>|
>| 2004-10-01;00:30:58;08ECA3936C;suse_list;mispo.com.br;cyrus;sent;
>| 2004-10-01;00:39:11;B7D013936C;suse_list;mispo.com.br;cyrus;sent;
>|
>| assim minha rotina de carga, trata dos 6 primeiros campos e descarta o
>| último, por consequencia, ele não leva o "\n"....
>|
>| Não sei o que fazer....por isso estou quebrando a cuca para entender o
>| porquê dos scripts levarem o "$" (new line) junto com o conteudo da
>| variável...não dá pra substituir o "$" por um "vazio" ou seja sed
>| 's/^$//g' (acho que é assim a regexp) e manter a quebra de linha do
>| arquivo?
>|
>| []s
>|
>| Vinicius
>|
>| >
>| > Vinicius,
>| > não entendi o que vc queria. Será alguma sujeira no final
>| do registro?
>| > Faça
>| > cat -vet arquivo, se aparecer algum caracter entre o sent e o $ que
>| > aparecerá no lugar do newline, use o sed, mas da seguinte maneira:
>| >
>| > suponha que vc tenha que remover os 2 últimos caracteres
>| sed 's/..$//'
>| > arquivo > outro_arquivo
>| >
>| > :wq
>| > Julio Cezar Neves
>| > - Programa de Software Livre -
>| > Tel:+55 21 2528-7070 / +55 21 8112-9988
>| > Fax: +55 21 2528-7646
>| > mailto:address@hidden
>| >
>| >
>| > | -----Mensagem original-----
>| > | De: SuSE List [mailto:address@hidden]
>| > | Enviada em: segunda-feira, 6 de dezembro de 2004 12:53
>| > | Para: address@hidden
>| > | Assunto: [shell-script] sed - substituir \n
>| > |
>| > |
>| > |
>| > | Pessoal,
>| > |
>| > | Estou quebrando a cuca aqui e até agora não consegui entender
>| > | onde estou
>| > | errando....
>| > |
>| > | eu tenho um arquivo com as seguintes entradas:
>| > |
>| > | 2004-10-01;00:30:58;08ECA3936C;suse_list;mispo.com.br;cyrus;sent
>| > | 2004-10-01;00:39:11;B7D013936C;suse_list;mispo.com.br;cyrus;sent
>| > |
>| > |
>| > | Até aqui eu gero este arquivo via shell normalmente....uso um
>| > | script em
>| > | php para dar carga num banco MySQL e tal....tudo
>| maravilha....quando
>| > | busco no meu banco, via query sql, o ultimo campo (sent)
>| eu não trago
>| > | nada na query, se executo a query com a opção de campo =
>| > | sent\n , ele me
>| > | traz todos os registros.....
>| > |
>| > | Já tentei processar este meu arquivo com o sed, usando:
>| > |
>| > | # sed 's/\n//g' < arquivo_entrada > arquivo_saida
>| > |
>| > | e continuo gravando no banco a última variável com o "\n" no
>| > | final.....
>| > |
>| > | e ai fica a dúvida: onde estou errando na substituição do
>| caracter \n
>| > | (new line)????
>| > |
>| > | alguém pode me ajudar???
>| > |
>| > | []s
>| > |
>| > | Vinicius
>| > |
>| > |
>| > |
>| > |
>| ---------------------------------------------------------------------
>| > | 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
>| >
>| ---------------------------------------------------------------------
>| >
>| > Links do Yahoo! Grupos
>| >
>| >
>| >
>| >
>| >
>| >
>| >
>| >
>| >
>| >
>| ---------------------------------------------------------------------
>| > 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
>| >
>| ---------------------------------------------------------------------
>| >
>| > Links do Yahoo! Grupos
>| >
>| >
>| >
>| >
>| >
>| >
>| >
>| >
>| >
>| >
>|
>|
>|
>| ---------------------------------------------------------------------
>| 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
>---------------------------------------------------------------------
>
>Links do Yahoo! Grupos
>
>
>
>
>
>
>
>
>
>---------------------------------------------------------------------
>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
>---------------------------------------------------------------------
>
>Links do Yahoo! Grupos
>
>
>
>
>
>
>
>
>
>
>
>
[As partes desta mensagem que não continham texto foram removidas]