#1 Le 10/04/2009, à 10:46
- J-dub
Différence entre deux fichiers selon plusieurs colonnes
Bonjour,
J'ai deux fichier .csv ( fichiers textes avec les colonnes séparés par des | ) qui se présentent sous cette forme :
fichier1 : 6 colonnes
nom_projet|nom_job|nom_lien|id_table|nom_fichier|nom_stage
exemple :
DS_KOLIM|PrdsVendusPrep|De_ECD|9|fichier1|EOICD
DS_KOLIM|ProduitsAch|De_ECD|15|file426|EACP
DS_KOLIM|CodeTEcreaTP|Ln_ECD_ALL|21|SORTIEfiledate|fm_DOIP
fichier2 : 5 colonnes
nom_projet|nom_job|nom_lien|id_table|nom_stage
exemple :
DS_KOLIM|AccRec|lien1|12|Copy_of_Transf
DS_KOLIM|AccRec|lien2|18|Transformer_50
DS_KOLIM|CodeTEcreaTP|Ln_ECD_ALL|24|tranfo
Je souhaiterai à partir de ces deux fichiers, récupérer uniquement les lignes du fichier2 pour lesquelles
il n'y a pas de correspondance dans le fichier1 par rapport aux 3 première colonnes nom_projet|nom_job|nom_lien
pour l'exemple avec les fichiers 1 et 2 ça me renverrai uniquement :
DS_KOLIM|AccRec|lien1|12|Copy_of_Transf
DS_KOLIM|AccRec|lien2|18|Transformer_50
Quelle(s) commande(s) utiliser? diff? comm?
Vous avez une idée de comment faire?
#2 Le 10/04/2009, à 11:45
- Totor
Re : Différence entre deux fichiers selon plusieurs colonnes
Comme ceci :
awk -F\| '{print $1"|"$2"|"$3}' test1.txt test2.txt |sort|uniq -u|xargs -l1 -i{} grep "^{}" test2.txt
Dernière modification par Totor (Le 10/04/2009, à 12:14)
-- Lucid Lynx --
Hors ligne
#3 Le 10/04/2009, à 19:02
- J-dubf
Re : Différence entre deux fichiers selon plusieurs colonnes
Merci!
j'ai testé sur un "échantillon" ça fonctionne, mais en testant sur mon fichier de quelques milliers de lignes j'ai un problème, le fichier en sortie comporte plus de ligne que le deuxième fichier...
J'ai essayé en triant les données avant mais c'est pareil, une idée d'où cela peut venir?
#4 Le 10/04/2009, à 20:19
- Totor
Re : Différence entre deux fichiers selon plusieurs colonnes
Sans les données / fichiers, ça me parait pas vraiment possible de te fournir une réponse !
-- Lucid Lynx --
Hors ligne
#5 Le 10/04/2009, à 20:58
- J-dub
Re : Différence entre deux fichiers selon plusieurs colonnes
Oui désolé je n'ai pas les fichier ici, je les posterai mardi
Merci de ton aide en tout cas
#6 Le 14/04/2009, à 20:41
- J-dub
Re : Différence entre deux fichiers selon plusieurs colonnes
Re!
Bon voila aujourd'hui j'ai fais un test avec ces données :
fichier transfotest.csv :
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|De_CHOIXCNTCTPLGHOR_CLOTURE|12|Tr_ID_DWH
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|De_CHX_CNTCT_ref|18|Tr_CHOIXCNTCTPLGHOR
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|De_TAB_VUE_PERS__TAB_PERS|24|Tr_ID_DWH
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|Ve_Hash_CHOIXCNTCTPLGHOR_Cloture|30|Tr_CHOIXCNTCTPLGHOR
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|Ve_Fic_rejet_Cloture1_CHOIXCNTCTPLGHOR|11|Tr_ID_DWH
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|Ve_Fic_rejet_Cloture2_CHOIXCNTCTPLGHOR|17|Tr_CHOIXCNTCTPLGHOR
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|Ve_Hash_CHOIXCNTCTPLGHOR_Cloture|23|Tr_ID_DWH
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|Ve_TAB_CHOIXCNTCTPLGHOR|29|Tr_CHOIXCNTCTPLGHOR
fichier tabfictest.csv :
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|Ve_Fic_rejet_Cloture1_CHOIXCNTCTPLGHOR|10|#SORTIE#/Fic_rejet_Cloture1_CHOIXCNTCTPLGHOR|Fic_rejet_Cloture1_CHOIXCNTCTPLGHOR
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|Ve_Fic_rejet_Cloture2_CHOIXCNTCTPLGHOR|16|#SORTIE#/Fic_rejet_Cloture2_CHOIXCNTCTPLGHOR|Fic_rejet_Cloture2_CHOIXCNTCTPLGHOR
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|Ve_TAB_CHOIXCNTCTPLGHOR|8|COMETE.TAB_CHX_CNTCT_PLG_HORAIR|TAB_CHOIXCNTCTPLGHOR
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|De_CHOIXCNTCTPLGHOR_CLOTURE|9|#SOURCE#/#CAISSE#_CHOIXCNTCTPLAGHORAIR_#DATE_1#_CLOTURE|CHXCNTCTPLGHOR
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|De_CHX_CNTCT_ref|7|COMETE.TAB_CHX_CNTCT|TAB_CHX_CNTCT_ref
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|De_TAB_VUE_PERS__TAB_PERS|13|TAB_VUE_PERS a, TAB_PERS b|TAB_VUE_PERS__TAB_PERS
awk -F\| '{print $1"|"$2"|"$3}' tabfictest.csv transfotest.csv |sort|uniq -u|xargs -l1 -i{} grep "^{}" transfotest.csv
La commande ne sort rien alors qu'elle devrait afficher ça non?
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|Ve_Hash_CHOIXCNTCTPLGHOR_Cloture|30|Tr_CHOIXCNTCTPLGHOR
DS_DMDWHNDF|Tabchxcntctplaghoraircloture|Ve_Hash_CHOIXCNTCTPLGHOR_Cloture|23|Tr_ID_DWH
Je pense que le problème vient du uniq -u pour vérifier si la ligne apparait dans les deux fichiers et si oui ne pas l'afficher, mais dans cet exemple la ligne apparait deux fois, mais elle vient du même fichier donc je voudrai qu'elle soit affichée.
Une idée pour faire que ça fonctionne ou c'est pas possible?
#7 Le 15/04/2009, à 10:47
- Totor
Re : Différence entre deux fichiers selon plusieurs colonnes
Effectivement, il y a une anomalie lorsque les 2 fichiers contiennent chacun des informations en doublon (informations = 3ères colonnes).
Voici la correction :
(awk -F\| '{print $1"|"$2"|"$3}' tabfictest.csv|sort|uniq ; awk -F\| '{print $1"|"$2"|"$3}' transfotest.csv|sort|uniq ) |sort|uniq -u|xargs -l1 -i{} grep "^{}" transfotest.csv
-- Lucid Lynx --
Hors ligne
#8 Le 15/04/2009, à 11:37
- Alain.g
Re : Différence entre deux fichiers selon plusieurs colonnes
salut
essaie ceci :
awk 'BEGIN {FS="|"; while(getline<"tabfictest.csv") tab[$1$2$3]} !($1$2$3 in tab)' transfotest.csv
edit : j'ai un peu simplifié
Dernière modification par Alain.g (Le 15/04/2009, à 16:35)
Xubuntu Karmic !
Hors ligne