2017-07-07 1 views
-1

Je voudrais comparer deux fichiers CSV énormes avec des quantités différentes. Une seule colonne contient les mêmes valeurs, car elles sont également présentes dans l'autre fichier de la même colonne, ce qui est beaucoup plus important. Donc, je veux garder les lignes dans l'un des fichiers où une ligne avec la même valeur dans le deuxième fichier existe également.Comparer les colonnes de deux fichiers CSV et supprimer les différences

Exemple:

File a 
value1,value2,value3,... 
value4,value5,value6,... 
value7,value8,value9,... 

File b: 
value10,value2,value11,... 
value12,value13,value14,... 

Dans le fichier final b (ou un nouveau dossier complet) devrait ressembler à ceci:

value10,value2,value11,... 

Je ne crois pas que ce soit difficile, mais pour le moment Je n'ai aucune idée de comment y parvenir. Comment pourrais-je y arriver avec des outils Linux ou un script bash/python?

Merci pour tout conseil!

+0

Fondamentalement, vous voulez atteindre B.Columns-A.Colums? –

+1

Qu'est-ce que "énorme" et quelle est la différence entre la taille du fichier (et le nombre de lignes)? – hop

+0

@ChetanKulkarni correct, veulent se débarrasser des différences liées à une colonne. – Kay

Répondre

0

En awk:

$ awk -F, ' 
NR==FNR {    # hash elements in the first file to a 
    for(i=1;i<=NF;i++) 
     a[$i] 
    next 
} 
{      # second file 
    for(i=1;i<=NF;i++) # go thru all elements 
     if($i in a) { # if match 
      print  # output 
      next  # and skip to next record 
     } 
    } 
' file1 file2 
value10,value2,value11 

Celui hachages le premier fichier dans la mémoire. Si par énorme vous voulez dire plus-que-votre-mémoire-peut-gérer, cela pourrait ne pas être la solution pour vous.

+0

Eh bien, "énorme" pourrait ne pas être le bon terme. Il peut être manipulé par la mémoire. Je pense que cela aide. Merci! – Kay