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

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

Re: [shell-script] Inserir quebra de linha a cada N repetições de um pad


From: Fredi Rolf Bieging
Subject: Re: [shell-script] Inserir quebra de linha a cada N repetições de um padrão.
Date: Wed, 27 Jan 2016 15:37:55 -0200

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.sql


2016-01-27 12:22 GMT-02:00 Rodrigo Tenorio address@hidden [shell-script] <address@hidden>:

 

Caros 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



reply via email to

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