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
-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).