2017-09-28 5 views
1

Je dispose d'un fichier plat appelé « Master_Data » avec des lignes ci-dessous: (en considérant Customer_Key est la clé primaire)ligne Supprimer qui correspond à la chaîne/valeur spécifique

Customer_Key,Customer_ID,Location 
"1","1001","Washington D.C" 
"2","1002","Los Angeles" 
"3","1003","New York" 

Je reçois la structure de fichier similaire appelé « Daily_Data ». Je dois ajouter les lignes au fichier "Master_Data" au cas où il s'agit d'une nouvelle ligne. Mettre à jour/Supprimer la ligne existante. Par exemple, j'ai reçu le fichier « Daily_Data » comme ci-dessous:

Customer_Key,Customer_ID,Location 
"3","1003","Austin" 
"4","1004","San Jose" 

Alors mon code devrait produire/modifier le fichier « Master_Data » comme ci-dessous:

Customer_Key,Customer_ID,Location 
"1","1001","Washington D.C" 
"2","1002","Los Angeles" 
"3","1003","Austin" 
"4","1004","San Jose" 

J'ai essayé jusqu'à présent

sed -n '2,$p' /users/files/Daily_Data.csv >> /users/files/Master_Data.csv 

Mais cette juste copie les données de Daily_Data et ajouter à Master_Data comme ci-dessous:

Customer_Key,Customer_ID,Location 
"1","1001","Washington D.C" 
"2","1002","Los Angeles" 
"3","1003","New York" 
"3","1003","Austin" 
"4","1004","San Jose" 

Que dois-je utiliser/essayer d'éliminer la ligne "3","1003","New York" de la meilleure façon possible.

Répondre

0

En utilisant awk, vous pouvez le faire:

awk -F, 'NR==FNR{a[$1]=$0; next} $1 in a{$0=a[$1]; delete a[$1]} 1; 
END{for (i in a) print a[i]}' Daily_Data Master_Data 

Customer_Key,Customer_ID,Location 
"1","1001","Washington D.C" 
"2","1002","Los Angeles" 
"3","1003","Austin" 
"4","1004","San Jose" 

Référence:Effective AWK Programming

0
awk -F, 'NR == FNR {print; id[$1]; next} !($1 in id)' Daily_Data Master_Data 
Customer_Key,Customer_ID,Location 
"3","1003","Austin" 
"4","1004","San Jose" 
"1","1001","Washington D.C" 
"2","1002","Los Angeles" 

Pour trier cela, vous pouvez faire

awk ... | { read -r header; echo "$header"; sort -t'"' -k2,2n; } 

Pour enregistrer ce retour à Master_Data, effectuez l'une des:

awk ... > tmp && mv tmp Master_Data 
awk ... | sponge Master_Data   # using `sponge` from `moreutils` package 
+0

Works! Merci! –