Software para fusionar archivos CSV con columnas verdadero/falso si la entrada está presente

Tengo varios archivos CSV separados que son solo una lista de una sola columna de direcciones de correo electrónico, donde cada archivo representa una "etiqueta" asociada con ese correo electrónico. Me gustaría fusionarlos en un archivo CSV, de modo que todas las direcciones de correo electrónico en cualquier archivo se enumeren en la primera columna, y todas las demás columnas son los nombres de los archivos y un verdadero/falso o 1/0 si el correo electrónico está en ese archivo.

¿Qué software tendría esta función y cómo la implementaría? Tengo la última versión de Excel si eso puede hacerlo.

¿Tienes alguna experiencia en programación? Esto sería bastante fácil en Python con Pandas.
@EricShain Tengo algo de experiencia en programación. Ha pasado mucho tiempo, pero podría modificar una plantilla con seguridad. Acabo de ver un video de introducción que explica Pandas y no estaba seguro de qué manera implementar mi solicitud según lo que vi. ¿Sabría de un ejemplo en el que podría basar lo que necesito, o simplemente debería hacer esa pregunta en uno de los intercambios de programación?
Hay enormes recursos a solo una búsqueda en Google de distancia. Aquí hay uno de StackOverflow: stackoverflow.com/questions/36749741/… . Si no tiene Python y Pandas instalados, le recomiendo usar la distribución de Anaconda: continuum.io/why-anaconda
@EricShain ¡Gracias! La instalación de la distribución de Anaconda salió bien, y estoy completando un curso bien revisado sobre pandas para obtener lo que necesito. Así que debería estar listo para irme ahora. ¡Agradezco la ayuda!
Creo que bash sería suficiente para esto...

Respuestas (2)

Perl es excelente para esto. También puede crear un sencillo bash one liner. Sin embargo, esto debería funcionar.

#!/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]);
}

Si no lo tiene Text::CSV_XS, puede instalarlo con

cpan Text::CSV_XS;

Guarde esto en un archivo, runme, chmod u+x runmey luego./runme *

Al final, parece que hay dos formas de manejar esto según el nivel de experiencia que tuve, que puedo compartir aquí en caso de que alguien más esté en una situación similar.

  1. Simplemente hágalo en Excel usando una macro. Esta respuesta SO explica bien cómo hacer una fusión básica en valores comunes. Si desea resolver el problema rápidamente, esta es probablemente su mejor opción.
  2. Como dijo Eric Shain en el primer comentario, la biblioteca pandas dentro de Python está diseñada especialmente para cosas como esta y permite posibilidades mucho más interesantes. Como necesitaba más flexibilidad y la capacidad de hacer más en el futuro, opté por esta solución, ya que la programación simple dentro de Python es muy fácil, incluso si estás oxidado como yo. ¡Vea el tercer comentario para obtener excelentes enlaces para comenzar!