Программное обеспечение для объединения файлов CSV со столбцами true/false, если запись присутствует

У меня есть несколько отдельных файлов CSV, которые представляют собой список адресов электронной почты в один столбец, где каждый файл представляет собой «тег», связанный с этим электронным письмом. Я хотел бы объединить их в один файл CSV, чтобы все адреса электронной почты в любых файлах были перечислены в первом столбце, а все остальные столбцы - это имена файлов и true/false или 1/0, если электронная почта находится в этом файл.

Какое программное обеспечение будет иметь эту функцию и как ее реализовать? У меня есть последняя версия Excel, если это возможно.

Есть ли у вас опыт программирования? Это было бы довольно легко в Python с Pandas.
@EricShain У меня есть некоторый опыт программирования. Прошло много времени, но я точно смогу настроить шаблон. Я только что посмотрел вводное видео, объясняющее Pandas, и не знал, как реализовать мой запрос, основываясь на том, что я видел. Не могли бы вы знать пример, на котором я мог бы основывать то, что мне нужно, или мне просто задать этот вопрос на одном из обменов стеками программирования?
Есть огромные ресурсы только поиском Google далеко. Вот один из StackOverflow: stackoverflow.com/questions/36749741/… . Если у вас не установлены Python и Pandas, я рекомендую использовать дистрибутив Anaconda: continuum.io/why-anaconda
@EricShain Спасибо! Установка дистрибутива Anaconda прошла успешно, и я заканчиваю хорошо проверенный курс по пандам, чтобы получить то, что мне нужно. Так что я должен быть готов идти сейчас. Цените помощь!
Я думаю, что bash будет достаточно для этого...

Ответы (2)

Perl отлично подходит для этого. Вы также можете сделать простой bash одним вкладышем. Это должно работать, хотя.

#!/usr/bin/env perl
use strict;
use warnings;

use Text::CSV_XS;

my $csv = Text::CSV_XS->new;
my %db, @tags;

while (my $email = <<>>) {
  chomp $email;
  push @tags, $ARGV;
  $db{$email}{$ARGV} = 1;
}

# Header
$csv->say(*STDOUT, ["Email", map $_, @tags]);

foreach my $email (keys %db) {
  $csv->say(*STDOUT, [$email, map $db{$email}{$_}//0, @tags]);
}

Если у вас его нет Text::CSV_XS, вы можете установить его с помощью

cpan Text::CSV_XS;

Сохраните это в файл, runme, chmod u+x runme, а затем./runme *

В конце концов, кажется, что есть два способа справиться с этим, исходя из уровня моего опыта, которым я могу поделиться здесь, если кто-то еще окажется в подобной ситуации.

  1. Очень просто сделать это в Excel с помощью макроса. Этот ответ SO хорошо объясняет, как выполнить базовое слияние общих значений. Если вы хотите решить проблему быстро, это, вероятно, ваш лучший выбор.
  2. Как сказал Эрик Шейн в первом комментарии, библиотека pandas в Python разработана специально для таких вещей и предоставляет гораздо более интересные возможности. Поскольку мне нужно было больше гибкости и возможности сделать больше в будущем, я выбрал это решение, поскольку простое программирование на Python очень легко, даже если вы заржавели, как я. См. третий комментарий для отличных ссылок, чтобы начать!