fusionner unix CSV basé sur la colonne 1

Bonjour, j’ai deux fichiers csv ayant les mêmes colonnes,

x.csv

 column1,column2 A,2 B,1 

y.csv

 column1,column2 A,1 C,2 

Je veux la sortie comme:

z.csv

 column1,column2 A,2 B,1 C,2 

c’est-à-dire que pour les données correspondantes dans la première colonne, je veux conserver l’enregistrement x.csv et pour un nouveau champ dans y.csv (comme A, 2), je veux juste l’append (comme C, 2).

Merci

 $ awk -F, 'NR==FNR{a[$1]; print; next} ! ($1 in a)' x.csv y.csv column1,column2 A,2 B,1 C,2 

Comment ça marche

  • -F,

    Ceci indique à awk d’utiliser une virgule comme séparateur de champs

  • NR==FNR{a[$1]; print; next}

    Lors de la lecture du premier fichier ( NR==FNR ), cela indique à awk de (a) append $1 comme clé au tableau associatif a , (b) imprimer la ligne et (c) ignorer les commandes restantes et passer au ligne next dans un fichier.

  • ! ($1 in a)

    Si nous arrivons ici, cela signifie que nous travaillons sur le deuxième fichier. Dans ce cas, nous imprimons la ligne si le premier champ n’est pas une clé du tableau a (en d’autres termes, si le premier champ n’apparaît pas dans le premier fichier).