Eliminar linha específica em arquivo txt [RESOLVIDO]

1. Eliminar linha específica em arquivo txt [RESOLVIDO]

Ricardo Scramin
rscramin

(usa Ubuntu)

Enviado em 23/06/2015 - 10:00h

Pessoal bom dia !

Sou novo no Forum e no mundo Linux e preciso de uma ajudinha dos universitários.

Preciso eliminar linhas de um arquivo txt que contem uma determinada expressão em determinada posição. Exemplo:
Vamos supor que no arquivo txt possui as seguintes linhas:
123...............................................................................5859.........................................................................................................122
70110004061681415423008 14519956870 5 11 980914828 06192015MIGRACAOA06192015MIGRACAO00002
70110004061681415423008 14519956870 1 11 24566581 06192015MIGRACAOA06192015MIGRACAO00003
70110004061680959167005 14524783415 2 06192015MIGRACAOA06192015MIGRACAO00001
70110004061680959167005 14524783415 1 81 32657257 06192015MIGRACAOA06192015MIGRACAO00002
70110004061681613365001 14525733870 2 11 21455700 06192015MIGRACAOA06192015MIGRACAO00001

Quero eliminar as linhas que possui brancos na posição 58 e 59.


  


2. Re: Eliminar linha específica em arquivo txt [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 23/06/2015 - 11:05h

Vc pode usar o grep ou o sed. Usando o sed:


sed -i '/^$/d' seuarquivo.txt


Usando o grep:


grep -v ^$ seuarquivo.txt > seuarquivo_novo.txt


Prefiro com o sed, mas atenção: o parâmetro -i já altera o arquivo, portanto, remova o parâmetro para testar a saída do comando e só depois acrescente para alterar o arquivo.
--
Renato Carneiro Pacheco
Certificado Linux LPIC-1
Especialista em Segurança em Redes de Computadores
Graduado em Redes de Comunicação

http://br.linkedin.com/in/renatocarneirop
http://www.facebook.com/renatocarneirop

"Não acredite no que eu digo, pois é a minha experiência e não a sua. Experimente, indague e busque." - Osho Rajneesh


3. Re: Eliminar linha específica em arquivo txt [RESOLVIDO]

Ricardo Scramin
rscramin

(usa Ubuntu)

Enviado em 23/06/2015 - 11:23h

Obrigado renato_pacheco !
Mas tenho uma dúvida.
Como ela sabe que os espaços a considerar é os das posições 58 e 59?
Talvez não tenha ficado claro no exemplo porque quando colei as informações do arquivo ele tirou os espaços entre os dados, mas vamos lá. Considere os pontos "." abaixo como espaços " ", ok!

70110004061681415423008......14519956870..............5..11...980914828............06192015MIGRACAOA06192015MIGRACAO00002
70110004061681415423008......14519956870..............1..11...24566581.............06192015MIGRACAOA06192015MIGRACAO00003
70110004061680959167005......14524783415..............2............................06192015MIGRACAOA06192015MIGRACAO00001
70110004061680959167005......14524783415..............1..11...32657257.............06192015MIGRACAOA06192015MIGRACAO00002
70110004061681613365001......14525733870..............2..11...21455700.............06192015MIGRACAOA06192015MIGRACAO00001

Note que nas linhas 1, 2, 4 e 5 possui o DDD dos telefones. Preciso eliminar somente as linhas que não contem o DDD, que estão nas posições 58 e 59.
Será possível ?




4. Re: Eliminar linha específica em arquivo txt

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 23/06/2015 - 11:31h

Ah, tá, entendi. Achei q vc queria remover as linhas em branco. Então é dessa forma:


sed -i '58,59s/ //g' seuarquivo.txt

--
Renato Carneiro Pacheco
Certificado Linux LPIC-1
Especialista em Segurança em Redes de Computadores
Graduado em Redes de Comunicação

http://br.linkedin.com/in/renatocarneirop
http://www.facebook.com/renatocarneirop

"Não acredite no que eu digo, pois é a minha experiência e não a sua. Experimente, indague e busque." - Osho Rajneesh


5. Re: Eliminar linha específica em arquivo txt [RESOLVIDO]

Zhu Sha Zang
zhushazang

(usa Gentoo)

Enviado em 23/06/2015 - 11:34h


Dê uma estudada no sed aqui antes: http://www.grymoire.com/Unix/Sed.html

Pode-lhe ser muito útil.

Att


6. Re: Eliminar linha específica em arquivo txt

Luis Henrique Pessoa
gwarah

(usa Ubuntu)

Enviado em 23/06/2015 - 12:58h

Uma outra opção para resolver isso é o awk.

Dá uma olha em substrings no tópico
http://www.grymoire.com/Unix/Awk.html#uh-43

No teu caso o arquivo para selecionar estas linhas (ex: select.awk) acho que resolve com algo + ou - assim
#!/bin/awk -f
substr($0,58,2) == " " {print}

Depois:
chmod u+x ./select.awk

./select.awk registros.txt > registros_ddd_ok.txt


---------------------
Luís Henrique Pessoa
O perfeito é desumano porque o humano é imperfeito
(Fernando Pessoa)


7. Re: Eliminar linha específica em arquivo txt [RESOLVIDO]

Ricardo Scramin
rscramin

(usa Ubuntu)

Enviado em 23/06/2015 - 13:47h

Ah valeu zhushazang, vai me ajudar sim, obrigado!

Renato_Pacheco, funcionou mas não foi o resultado esperado rs...
Quero eliminar a linha e não os espaços em entre os dados.
É tipo assim. Se a linha possuir espaço em branco na posição (coluna) 58 e 59, então exclua do arquivo. Pelo que eu entendi desse comando, ele irá eliminar os espaços em branco entre os dados da linha 58 e 59. Correto?





8. Re: Eliminar linha específica em arquivo txt [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 23/06/2015 - 14:37h

rscramin escreveu:

Ah valeu zhushazang, vai me ajudar sim, obrigado!

Renato_Pacheco, funcionou mas não foi o resultado esperado rs...
Quero eliminar a linha e não os espaços em entre os dados.
É tipo assim. Se a linha possuir espaço em branco na posição (coluna) 58 e 59, então exclua do arquivo. Pelo que eu entendi desse comando, ele irá eliminar os espaços em branco entre os dados da linha 58 e 59. Correto?




Correto! É q eu não tinha entendido realmente o q vc queria. Só uma pergunta: as linhas 58 e 59 são apenas exemplos? Pelo q entendi, vc vai conferir todas as linhas q contém espaços. Se tiver, deve ser apagada, é isso?


--
Renato Carneiro Pacheco
Certificado Linux LPIC-1
Especialista em Segurança em Redes de Computadores
Graduado em Redes de Comunicação

http://br.linkedin.com/in/renatocarneirop
http://www.facebook.com/renatocarneirop

"Não acredite no que eu digo, pois é a minha experiência e não a sua. Experimente, indague e busque." - Osho Rajneesh


9. Re: Eliminar linha específica em arquivo txt [RESOLVIDO]

Ricardo Scramin
rscramin

(usa Ubuntu)

Enviado em 23/06/2015 - 14:50h

58 e 59 são exemplos mas de colunas e não de linhas.
O arquivo contem os telefones de todos os clientes que serão migrados para uma tabela no DB, mas antes quero eliminar os telefones que não possuem DDD. Como o arquivo é posicional, as colunas de 58 à 63 representa o DDD, portanto se eles estiverem com espaço em branco quero eliminá-los do arquivo.


10. Re: Eliminar linha específica em arquivo txt

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 23/06/2015 - 15:04h

Opa!

Simples mas funciona!

 egrep  "[0-9]{23}.*[0-9]{11}.*[0-9]\s{2}[0-9]{2}.*" arquivo.txt > arquivo_limpo.txt


abs!


11. Re: Eliminar linha específica em arquivo txt [RESOLVIDO]

Luis Henrique Pessoa
gwarah

(usa Ubuntu)

Enviado em 23/06/2015 - 15:09h

rscramin escreveu:

58 e 59 são exemplos mas de colunas e não de linhas.
O arquivo contem os telefones de todos os clientes que serão migrados para uma tabela no DB, mas antes quero eliminar os telefones que não possuem DDD. Como o arquivo é posicional, as colunas de 58 à 63 representa o DDD, portanto se eles estiverem com espaço em branco quero eliminá-los do arquivo.


A condição para eliminação da linha é: na posição entre as colunas 58 a 63 ter todos os espaços em branco ou pelo menos um espaço em branco?

---------------------
O perfeito é desumano porque o humano é imperfeito
(Fernando Pessoa)


12. Re: Eliminar linha específica em arquivo txt [RESOLVIDO]

Ricardo Scramin
rscramin

(usa Ubuntu)

Enviado em 23/06/2015 - 15:16h


gwarah, todos espeços em branco.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts