Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink
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