|
From: | Julio C. Neves |
Subject: | Re: [shell-script] Inserir quebra de linha a cada N repetições de um padrão. |
Date: | Wed, 27 Jan 2016 18:18:28 -0200 |
Alysson, obrigado.
Testei aqui e também funcionou.
:)
Rodrigo BoëchatEm qua, 27 de jan de 2016 às 15:38, Fredi Rolf Bieging address@hidden [shell-script] <address@hidden> escreveu:Verdade Rodrigo... como tinha 10 linhas não me dei conta do problema com o comando anterior.Esse outro comando deve corrigir o problema:sed -r "s/[^\(]*(([^\)]+\),){5})/\1;\n/g; s/,;/;/g" file | sed "s/^/INSERT INTO 'TABLE' VALUES /g"2016-01-27 13:51 GMT-02:00 Rodrigo Tenorio address@hidden [shell-script] <address@hidden>:Alysson,
Obrigado pela ajuda.
Testei e não obtive o resultado esperado.
Fredi,
Obrigado pela dica.
Em parte sim.
Mas caí noutra situação. O SED contou os cinco primeiros padrões corretamente e manteve os demais agrupados na segunda linha.
O arquivo tem mais de 10 repetições então ele separou cinco na primeira linha e colocou o restante na segunda.
Infelizmente isso não resolve.
Tentei algo assim:
sed ":a;s/),(/);\nINSERT INTO 'TABLE' VALUES (/5;t a"
Mas não deu certo.
Aliás deu "meio" certo, veja o retorno:INSERT INTO `ac` VALUES (1,'Rio Branco','20 de Novembro','Sobral','69903-695','Rua'),(2,'Rio Branco','A','Floresta','69906-350','Rua'),(3,'Rio Branco','A','Terminal Cadeia Velha','69900-520','Rua'),(4,'Rio Branco','A','Jardim de Alah','69911-290','Rua'),(5,'Rio Branco','A','Manoel Julião','69912-680','Rua');INSERT INTO 'TABLE' VALUES (6,'Rio Branco','A','João Eduardo','69904-665','Rua');INSERT INTO 'TABLE' VALUES (7,'Rio Branco','Abacate','Morada do Sol','69910-310','Rua');INSERT INTO 'TABLE' VALUES (8,'Rio Branco','Abelhas','Santa Quitéria','69914-370','Rua');INSERT INTO 'TABLE' VALUES (9,'Rio Branco','Absolon de Almeida','Cerâmica','69900-430','Travessa');INSERT INTO 'TABLE' VALUES (10,'Rio Branco','AC-040','Vila Acre','69902-450','Rodovia');INSERT INTO 'TABLE' VALUES (11,'Rio Branco','AC-040','Triângulo','69901-365','Rodovia');INSERT INTO 'TABLE' VALUES (12,'Rio Branco','AC-040','Areal','69902-350','Rodovia');INSERT INTO 'TABLE' VALUES (13,'Rio Branco','AC-040','Triângulo','69902-060','Rodovia');INSERT INTO 'TABLE' VALUES (14,'Rio Branco','AC-040','Corrente','69902-260','Rodovia');INSERT INTO 'TABLE' VALUES (15,'Rio Branco','AC-040','Seis de Agosto','69901-180','Rodovia');INSERT INTO 'TABLE' VALUES (16,'Rio Branco','Acácias','Tropical','69910-550','Rua');INSERT INTO 'TABLE' VALUES (17,'Rio Branco','Açaí','Chácara Ipê','69911-710','Alameda');INSERT INTO 'TABLE' VALUES (18,'Rio Branco','Acre','Taquari','69902-240','Rua');INSERT INTO 'TABLE' VALUES (19,'Rio Branco','Acre','Aeroporto Velho','69903-520','Travessa');INSERT INTO 'TABLE' VALUES (20,'Rio Branco','Açucenas','Primavera','69911-550','Rua');
.
.
.Em qua, 27 de jan de 2016 às 13:15, Fredi Rolf Bieging address@hidden [shell-script] <address@hidden> escreveu:Veja se isso resolve:sed "s/),(/);\nINSERT INTO 'TABLE' VALUES ((/5;" arquivo.sqlCaros camaradas de lista,Tenho comigo um longo insert table de uma linha apenas [8M em txt] que meu computador limitado não consegue processar de uma única vez. Eu gostaria de transformar essa única linha em muitas linhas da seguinte forma:
Padrão:
INSERT INTO 'TABLE' VALUES (1,'Rio Branco','20 de Novembro','Sobral','69903-695','Rua'),(2,'Rio Branco','A','Floresta','69906-350','Rua'),(3,'Rio Branco','A','Terminal Cadeia Velha','69900-520','Rua'),(4,'Rio Branco','A','Jardim de Alah','69911-290','Rua'),(5,'Rio Branco','A','Manoel Julião','69912-680','Rua'),(6,'Rio Branco','A','João Eduardo','69904-665','Rua'),(7,'Rio Branco','Abacate','Morada do Sol','69910-310','Rua'),(8,'Rio Branco','Abelhas','Santa Quitéria','69914-370','Rua'),(9,'Rio Branco','Absolon de Almeida','Cerâmica','69900-430','Travessa'),(10,'Rio Branco','AC-040','Vila Acre','69902-450','Rodovia');Para:
INSERT INTO 'TABLE' VALUES (1,'Rio Branco','20 de Novembro','Sobral','69903-695','Rua'),(2,'Rio Branco','A','Floresta','69906-350','Rua'),(3,'Rio Branco','A','Terminal Cadeia Velha','69900-520','Rua'),(4,'Rio Branco','A','Jardim de Alah','69911-290','Rua'),(5,'Rio Branco','A','Manoel Julião','69912-680','Rua');
INSERT INTO 'TABLE' VALUES (6,'Rio Branco','A','João Eduardo','69904-665','Rua'),(7,'Rio Branco','Abacate','Morada do Sol','69910-310','Rua'),(8,'Rio Branco','Abelhas','Santa Quitéria','69914-370','Rua'),(9,'Rio Branco','Absolon de Almeida','Cerâmica','69900-430','Travessa'),(10,'Rio Branco','AC-040','Vila Acre','69902-450','Rodovia');
Assim com um loop em shell eu pretendo executar linha a linha.
Bom a parte do LOOP eu domino, mas meu conhecimento limitado em SED não me ajudou.
Como TESTE tentei:
sed "s/\(([0-9]*,\(.*,\)\{3\}[0-9'-]\{11\},.*),\)\{2\}/\nTESTE &/g"
Mas o resultado foi apenas uma linha em branco e a segunda com "TESTE" seguido do restante da linha.
Precisava de uma força.
Grato,
Rodrigo Boëchat
[Prev in Thread] | Current Thread | [Next in Thread] |