.csv Mantém apenas determinados endereços de e-mail?

0

Eu tenho um arquivo .csv grande com meus clientes Nome: E-mail

Eu tenho outra grande lista de e-mails que fazem parte dessa lista e só quero mantê-los. Como posso remover todos os contatos do arquivo .csv que não estão em X.txt?

    
por Teddy291 18.05.2015 / 17:33

2 respostas

0

Se você não precisa que o e-mail esteja em um campo específico do arquivo .csv e só precise imprimir as linhas do arquivo que contêm um dos e-mails de destino, basta usar grep :

grep -wFf emails.txt file.csv > newfile.csv

Se eles precisam estar em um campo específico, use a solução do @ ChrisDown. Observe, no entanto, que os arquivos csv podem ser bastante complexos. Por exemplo, esta é uma linha csv válida:

field1,"field 2, which can contain commas, is here", field3

Para arquivos mais complexos, você precisará usar um analisador csv para lidar com eles corretamente. Por exemplo, em Perl, você pode usar Text::CSV :

  1. Instale cpanm (se você usar o Perl, me agradecerá mais tarde)

    $ sudo apt-get install cpanminus
    

    Se você não está em um sistema Debian, você deve ser capaz de instalá-lo usando o gerenciador de pacotes da sua distribuição.

  2. Instale o módulo Text::CSV

    $ sudo cpanm Text::CSV
    
  3. Analise seu arquivo

    $ perl -MText::CSV -le '
    
        BEGIN{
            open($f,"emails.txt"); 
            while(<$f>){chomp; $k{$_}++;}
        } 
        $csv=Text::CSV->new({binary=>1}); 
        while ($row = $csv->getline(STDIN)){
          print join",", @$row if defined($k{$row->[2]})
        }' < file.csv
    
por 18.05.2015 / 18:00
1

Supondo que os e-mails em X.txt sejam um por linha, você pode construir um array, verificar sua existência e depois imprimir as linhas correspondentes:

$ awk -F: 'FNR==NR { a[$2] = $0; next } ($1 in a) { print a[$1] }' customers.csv X.txt
Foo Bar:[email protected]
Baz Qux:[email protected]

FNR==NR só será verdadeiro quando estiver no primeiro arquivo. Aqui estão os arquivos que eu usei para testar isso:

$ cat customers.csv 
Foo Bar:[email protected]
Baz Qux:[email protected]
Wibble Wobble:[email protected]
$ cat X.txt 
[email protected]
[email protected]
    
por 18.05.2015 / 17:45