linux awk de la comparaison de deux fichiers csv et la création d'un nouveau fichier avec un drapeau

J'ai 2 fichiers CSV que j'ai besoin de comparer et d'obtenir la différence d'un nouveau format de fichier. Les exemples sont donnés ci-dessous.

ANCIEN fichier

DTL,11111111,1111111111111111,11111111111,Y,N,xx,xx
DTL,22222222,2222222222222222,22222222222,Y,Y,cc,cc
DTL,33333333,3333333333333333,33333333333,Y,Y,dd,dd
DTL,44444444,4444444444444444,44444444444,Y,Y,ss,ss
DTL,55555555,5555555555555555,55555555555,Y,Y,qq,qq

NOUVEAU fichier

DTL,11111111,1111111111111111,11111111111,Y,Y,xx,xx
DTL,22222222,2222222222222222,22222222222,Y,N,cc,cc
DTL,44444444,4444444444444444,44444444444,Y,Y,ss,ss
DTL,55555555,5555555555555555,55555555555,Y,Y,qq,qq
DTL,77777777,7777777777777777,77777777777,N,N,ee,ee

Fichier de sortie

Je veux comparer l'ancien et le nouveau fichiers CSV et de trouver les changements qui s'effectue dans le nouveau fichier et mettre à JOUR un DRAPEAU pour désigner ces changements

U - si le nouveau fichier d'enregistrement est mis à JOUR
D - si un enregistrement existant dans l'ancien fichier est supprimé dans le nouveau fichier
N - si un enregistrement existant dans le nouveau fichier n'est pas disponible dans l'ancien fichier

l'exemple de fichier de sortie est présent.

DTL,11111111,1111111111111111,11111111111,Y,Y,xx,xx U
DTL,22222222,2222222222222222,22222222222,Y,N,cc,cc U
DTL,33333333,3333333333333333,33333333333,Y,Y,dd,dd D
DTL,77777777,7777777777777777,77777777777,N,N,ee,ee N

J'ai utilisé la commande diff mais il faudra répéter l'enregistrement mis à JOUR de trop qui n'est pas que je veux.

 DTL,11111111,1111111111111111,11111111111,Y,N,xx,xx
 DTL,22222222,2222222222222222,22222222222,Y,Y,cc,cc
 DTL,33333333,3333333333333333,33333333333,Y,Y,dd,dd
  ---
 DTL,11111111,1111111111111111,11111111111,Y,Y,xx,xx
 DTL,22222222,2222222222222222,22222222222,Y,N,cc,cc
 5a5
 DTL,77777777,7777777777777777,77777777777,N,N,ee,ee

J'ai utilisé un AWK seule ligne de commande pour filtrer mes dossiers ainsi

 awk 'NR==FNR{A[$1];next}!($1 in A)' FS=: old.csv new.csv

le problème, c'est ne pas me l'enregistre uniquement appartenant à l'ANCIEN fichier.
qui est

DTL,33333333,3333333333333333,33333333333,Y,Y,dd,dd

J'ai entamé un conduit script bash ainsi à ahieve cette mais il n'a pas trouver beaucoup d'aide avec un bon exemple.

 myscript.awk

BEGIN { 
        FS = ","    # input field seperator 
        OFS = ","   # output field seperator
}

NR > 1 {
    #flag 
    # N - new record  D- Deleted U - Updated

id = $1
    name = $2
    flag = 'N'

   # This prints the columns in the new order. The commas tell Awk to use the     character set in OFS
    print id,name,flag
}

 >> awk -f  myscript.awk  old.csv new.csv > formatted.csv
le simple droit chemin qui est décrit ici, et fonctionne: stackoverflow.com/a/15385080/5427256

OriginalL'auteur Sanath | 2012-03-02