Autor Tópico: Localizar e Substituir (em massa) [RESOLVIDO]  (Lida 4458 vezes)

Offline Lestat

  • Usuário Ubuntu
  • *
  • Mensagens: 90
  • Ubuntu 11.04
    • Ver perfil
Localizar e Substituir (em massa) [RESOLVIDO]
« Online: 20 de Junho de 2011, 01:36 »
Boa noite amigos,
to quebrando a cabeça aqui e acho que alguém de vocês pode me dar uma luz!
Tenho uma planilha em TXT separada por ponto e e virgula e preciso localizar todos os campos que tem entrada igual. Por exemplo:

Citar
true    try    type    u    ur
sure    take    true    try    think

o "True" e o "Try" apareceram duas vezes... pra uma tabelinha pequena que nem essa da pra usar o localizar e substituir do BR office, o problema é quando a tabela tem 1000 entradas. fazer uma por 1 dá 1 trabalho do cão.
Alguém saberia como agilizar isso em bash ou de qualquer outra forma mais fácil (e principalmente rápida)?

Obrigado,
abraços ;)
« Última modificação: 20 de Junho de 2011, 18:38 por Lestat »
"O Primeiro Dever da Inteligência é Duvidar de Si Mesma" Albert Einstein

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Localizar e Substituir (em massa)
« Resposta #1 Online: 20 de Junho de 2011, 13:39 »
O texto diz uma coisa, mas no exemplo tem outra... vou só sugerir: use o sed.

Offline Lestat

  • Usuário Ubuntu
  • *
  • Mensagens: 90
  • Ubuntu 11.04
    • Ver perfil
Re: Localizar e Substituir (em massa)
« Resposta #2 Online: 20 de Junho de 2011, 13:47 »
Certo, mas como fica a sintaxe do sed? lembrando que eu NÃO SEI as palavras que to procurando. só quero substituir entradas iguais por "espaço"

Abraço
"O Primeiro Dever da Inteligência é Duvidar de Si Mesma" Albert Einstein

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Localizar e Substituir (em massa)
« Resposta #3 Online: 20 de Junho de 2011, 15:27 »
Como é que eu posso fornecer um exemplo se você não explica o que realmente quer?
Código: [Selecionar]
#!/usr/bin/env python

import sys

seen  = []
seen2 = []
for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print 'cannot open', arg
    else:
        for line in f:
            words = line.rstrip('\n').split()

            for word in words:
                if not word in seen:
                    seen.append(word)
                else:
                    seen2.append(word)
            seen.append("\n")
        f.close()
        for word in seen:
            if not word in seen2:
                print word,



É só fornecer o nome do arquivo. Ex:
Citar
➜  ~  cat temp.txt
true    try    type    u    ur
sure    take    true    try    think
➜  ~  ./teste.py temp.txt
type u ur
sure take think
➜  ~  

Offline Lestat

  • Usuário Ubuntu
  • *
  • Mensagens: 90
  • Ubuntu 11.04
    • Ver perfil
Re: Localizar e Substituir (em massa)
« Resposta #4 Online: 20 de Junho de 2011, 15:58 »
Achei que tinha sido claro, devo ter me expressado mal, desculpe.
O que eu quero fazer é o seguinte tenho uma tabela com "n-entradas" e quero localizar e substituir (por vazio) todas as entradas duplicadas.
O exemplo que tinha dado anteriormente de uma tabela "imaginária" com as entradas

Citar
true    try    type    u    ur
sure    take    true    try    think

era só pra ilustrar que o "true" e o "try" se repetiam e quero que eles sejam substituídos por "branco" (pode ser por vazio mesmo, ou por 1 palavra genérica, tipo "Repetido"). A diferença é que estou "mostrando" a tabela, para saber que tem essas entradas, quero fazer isso de forma automática. simplesmente rodando o script, ou comando, em cima do meu arquivo e ele limpando as entradas iguais.

Valeu ;)

...a ia quase esquecendo o script que tu passou me retorna o seguinte resultado:
Citar
./teste.py: 5: seen: not found
./teste.py: 6: seen2: not found
./teste.py: 8: Syntax error: word unexpected (expecting "do")
« Última modificação: 20 de Junho de 2011, 16:03 por Lestat »
"O Primeiro Dever da Inteligência é Duvidar de Si Mesma" Albert Einstein

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: Localizar e Substituir (em massa)
« Resposta #5 Online: 20 de Junho de 2011, 17:00 »
Achei que tinha sido claro, devo ter me expressado mal, desculpe.
O que eu quero fazer é o seguinte tenho uma tabela com "n-entradas" e quero localizar e substituir (por vazio) todas as entradas duplicadas.
O exemplo que tinha dado anteriormente de uma tabela "imaginária" com as entradas

Citar
true    try    type    u    ur
sure    take    true    try    think

era só pra ilustrar que o "true" e o "try" se repetiam e quero que eles sejam substituídos por "branco" (pode ser por vazio mesmo, ou por 1 palavra genérica, tipo "Repetido"). A diferença é que estou "mostrando" a tabela, para saber que tem essas entradas, quero fazer isso de forma automática. simplesmente rodando o script, ou comando, em cima do meu arquivo e ele limpando as entradas iguais.

Valeu ;)

...a ia quase esquecendo o script que tu passou me retorna o seguinte resultado:
Citar
./teste.py: 5: seen: not found
./teste.py: 6: seen2: not found
./teste.py: 8: Syntax error: word unexpected (expecting "do")

Veja: Seu exemplo mostra DUAS linhas diferentes que contém DUAS palavras iguais.
Isso não é, necessariamente, "entradas duplicadas".

O que você quer, acredito, mas não tenho certeza, e percorrer a tabela inteira e substituir "palavras" duplicadas?

Ahhh... e aqui o script em python feito por irtigor funcionou perfeitamente com o temp.txt fornecido.

[]s
Fred
« Última modificação: 20 de Junho de 2011, 17:06 por fpissarra »

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Localizar e Substituir (em massa)
« Resposta #6 Online: 20 de Junho de 2011, 17:46 »
Código: [Selecionar]
#!/usr/bin/env python

import sys

seen  = []
seen2 = []
for arg in sys.argv[1:]:
    try:
        f = open(arg, 'r')
    except IOError:
        print 'cannot open', arg
    else:
        for line in f:
            words = line.rstrip('\n').split()

            for word in words:
                if not word in seen:
                    seen.append(word)
                else:
                    seen2.append(word)
            seen.append("\n")
        f.close()
        f = open(arg, 'r')
        for line in f:
            words = line.rstrip('\n').split()
            for word in words:
                if not word in seen2:
                    print word,
                else:
                    print "--espaco--",
            print
        f.close()


Citar
➜  ~  cat temp.txt       
true    try    type    u    ur
sure    take    true    try    think
➜  ~  ./teste2.py temp.txt
--espaco-- --espaco-- type u ur
sure take --espaco-- --espaco-- think

Offline Lestat

  • Usuário Ubuntu
  • *
  • Mensagens: 90
  • Ubuntu 11.04
    • Ver perfil
Re: Localizar e Substituir (em massa)
« Resposta #7 Online: 20 de Junho de 2011, 17:52 »
...exatamente isso fpissarra, eu tenho uma tabela com 9 linhas por 100 colunas, sendo que cada espaço da tabela tem UMA palavra, logo, terei 900 palavras... quero, pegar a primeira palavra, comparar com toda a tabela, caso exista outra entrada igual as duas (ou quantas existirem) passam a ser uma célula vazia da tabela... no exemplo anterior que tinha dado:
Citar
true    try    type     u       ur
sure    take    true    try    think


Citar
XXX    XXX    type    u        ur
sure    take    XXX    XXX    think

SENDO QUE: XXX equivale a (nada = célula vazia)

Valeu ;)
"O Primeiro Dever da Inteligência é Duvidar de Si Mesma" Albert Einstein

Offline Lestat

  • Usuário Ubuntu
  • *
  • Mensagens: 90
  • Ubuntu 11.04
    • Ver perfil
Re: Localizar e Substituir (em massa)
« Resposta #8 Online: 20 de Junho de 2011, 18:12 »
irtigor acho que funcionou, só substitui o "--espaco--" por "espaco;" (para ele entender como célula da planilha) vou fazer mais alguns testes e já posto o resultado! valeu!
"O Primeiro Dever da Inteligência é Duvidar de Si Mesma" Albert Einstein

Offline Lestat

  • Usuário Ubuntu
  • *
  • Mensagens: 90
  • Ubuntu 11.04
    • Ver perfil
Re: Localizar e Substituir (em massa)
« Resposta #9 Online: 20 de Junho de 2011, 18:38 »
Tchê!!!! Funcionou! a única coisa que precisei modificar foi substituir o "--espaco--" por ";espaco" e não "espaco;" como tinha dito antes. sem palavras para agradecer =D
uma ótima semana
"O Primeiro Dever da Inteligência é Duvidar de Si Mesma" Albert Einstein