2010-07-30 14 views
0

J'ai un fichier CSV contenant certaines données utilisateur, il ressemble à ceci:comment trouver la différence entre un fichier csv et un fichier contenant une seule colonne de ce csv

"10333","","an.10","Kenyata","","Aaron","","","","","","","","","","" 
"12222","","an.4","Wendy","","Aaron","","","","","","","","","","" 
"14343","","aaron.5","Nanci","","Aaron","","","","","","","","","","" 

J'ai aussi un fichier qui a un élément sur chaque ligne comme celui-ci:

an.10 
arron.5 

ce que je veux est de trouver que les lignes dans le fichier CSV contenu dans le fichier de la liste.

donc désiré la sortie serait:

"10333","","an.10","Kenyata","","Aaron","","","","","","","","","","" 
"14343","","aaron.5","Nanci","","Aaron","","","","","","","","","","" 

(Notez comment an.4 ne figure pas dans cette nouvelle liste.)

Je ne importe quel environnement disponible pour moi et je suis prêt à essayer à peu près quoi que ce soit à part de le faire manuellement car ce csv contient des millions d'enregistrements et il y a environ 100k entrées dans la liste elle-même.

+0

Jetez un oeil à mon outil FOSS CSVfix à http://code.google.com/p/csvfix/ - en particulier la commande de jointure. –

+0

Quel système d'exploitation? Avez-vous Excel disponible? Voulez-vous une solution de programmation? Avez-vous des outils comme grep disponibles? – Frank

+0

Je cours fedora 12 et ai des boîtes de Linux, également Windows VMs. Grep, sed, diff, tous sont disponibles. Je préfère les solutions CLI mais je suis ouvert à perl ou à tout autre chose. – Chris

Répondre

1

À quel point les identificateurs an.10 et autres sont-ils uniques?

Peut-être un très petit * x script shell serait assez:

for i in $(uniq list.txt); do grep "\"$i\"" data.csv; done 

qui, pour chaque entrée unique dans la liste, retourner toutes les lignes correspondant dans le fichier csv. Cependant, il ne correspond pas exclusivement à la deuxième colonne. (Cela pourrait se faire avec awk par exemple)

+0

Ils sont uniques comme peuvent l'être. :-) – Chris

+1

Quelle coïncidence effrayante dans le choix des noms de fichiers! Mais votre code ne fonctionnera pas, $ je n'aurai qu'une seule valeur "list.txt". –

+0

En effet. Je me suis trompé. :) – relet

1

Si le fichier csv est data.csv et le fichier de la liste est list.txt, je ferais ceci:

for i in `cat list.txt`; do grep $i data.csv; done 
+0

je finis avec des doublons cependant? – Chris

+0

Avez-vous des doublons dans votre liste alors? Si vous voulez une solution rapide pour les supprimer, placez votre liste ou le résultat dans '| uniq' – relet