2017-05-23 1 views
-1

Ceci est une variante sur Using awk how do I combine data in two files and substitute values from the second file to the first file?En utilisant awk, conditionnellement valeur par défaut d'impression basée sur la touche, la valeur non existante dans le deuxième fichier

La raison pour laquelle cette question n'est pas le même que celui lié ci-dessus est que celui-ci occupe une quelques cas supplémentaires.

donnees.txt contient des données:

A;1 
B;2 
C;3 
A;4 

keys.txt contient des paires "clé, valeur", cependant, la clé, la paire de valeur de C est manquant:

A;60 
B;50 
D;30 

sortie souhaitée

A;1;60 
B;2;50 
C;3;1 
A;4;60 

pour tous les « clés », la valeur des paires manquantes, ajoutez la valeur par défaut de 1 à ces lignes. Devrait également être capable de gérer les paires "clé, valeur" dans keys.txt qui n'a pas de clé correspondante dans data.txt (comme D; 30 dans cet exemple).

+0

double possible de [Utiliser awk comment puis-je combiner des données dans deux fichiers et valeurs de remplacement du deuxième fichier au premier fichier?] (Https://stackoverflow.com/questions/44111737/using-awk- how-do-i-combine-data-in-two-files-et-substitute-values-from-the-seco) – RomanPerekhrest

Répondre

3

awk à la rescousse!

par rapport à la answer associée supprimer dans le filtre et remplacer le dernier champ avec un conditionnel.

$ awk 'BEGIN {FS=OFS=";"} 
     NR==FNR {a[$1]=$2; next} 
       {print $0,($1 in a)?a[$1]:1}' file2 file1 

A;1;60 
B;2;50 
C;3;1 
A;4;60 
+0

Fonctionne à merveille, merci beaucoup! – Markus