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 15/04/2013, à 13:03

Hizoka

[resolu] recherche de doublon parmis une liste et traitement

Bonjour,

Là j'ai un peu de mal...

J'ai une grande liste de fichiers de types :

fichier_0001.pgm
fichier_0001.pgm.txt
fichier_0002.pgm
fichier_0002.pgm.txt
...
fichier_2980.pgm
fichier_2980.pgm.txt

Dans cette liste je recherche les fichier txt vident :

find "${PWD}" -name "*.txt" -empty
=> fichier_0001.pgm.txt
=> fichier_0009.pgm.txt
=> fichier_0099.pgm.txt
=> fichier_0759.pgm.txt
=> fichier_1559.pgm.txt

Maintenant je veux rechercher les fichiers pgm identiques correspondant aux fichiers txt, donc comparer :
fichier_0001.pgm avec fichier_0009.pgm avec fichier_0099.pgm avec fichier_0759.pgm avec fichier_1559.pgm

while read; do md5sum "${REPLY/%.txt}" >> liste_md5sum; done < <(find "${PWD}" -name "*.txt" -empty | sort)
=> 666ae4f0bb7964de1e44081364579c44  fichier_0001.pgm
=> 38ac7badf653a6afb7e883d3e6a543a2  fichier_0009.pgm
=> 666ae4f0bb7964de1e44081364579c44  fichier_0099.pgm
=> b1ad6c3e4b512eefc5a88389999ea64e  fichier_0759.pgm
=> 38ac7badf653a6afb7e883d3e6a543a2  fichier_1559.pgm

Je trie les fichiers en fonction de leur md5sum

sort liste_md5sum -o liste_md5sum
=> 38ac7badf653a6afb7e883d3e6a543a2  fichier_0009.pgm
=> 38ac7badf653a6afb7e883d3e6a543a2  fichier_1559.pgm
=> 666ae4f0bb7964de1e44081364579c44  fichier_0001.pgm
=> 666ae4f0bb7964de1e44081364579c44  fichier_0099.pgm
=> b1ad6c3e4b512eefc5a88389999ea64e  fichier_0759.pgm

Donc la je vois bien qu'il y a des fichiers pgm identiques.

Je voudrais maintenant, et c'est la que j'ai du mal, regrouper sur une même ligne le fichiers ayant le même md5sum en les séparant par des @@
Donc avoir un truc du genre

=> fichier_0009.pgm @@ fichier_1559.pgm
=> fichier_0001.pgm @@ fichier_0099.pgm
=> fichier_0759.pgm

Apres je pense pouvoir reussir a faire :
Avec une ligne exemple : fichier_0009.pgm fichier_1559.pgm
modifier le fichier fichier_0009.pgm.txt
s'il y a d'autres fichier sur la meme ligne, copier le txt (me faut des copies et non des liens) pour les autres fichiers
cp fichier_0009.pgm.txt fichier_1559.pgm.txt

D'ailleurs pourquoi cela ne fonctionne-t-il pas ?

find "${PWD}" -name "*.txt" -empty | sed 's/.txt$//' | md5sum

=> cela ne me renvoie qu'une seule valeur

et je ne peux pas faire :

find "${PWD}" -name "*.txt" -empty -exec md5sum {} \;

car sinon je fais le md5sum sur le .txt et non sur le .pgm

Si vous avez des idées pour simplifier tout ça je prends.

Voilou, merci à vous !

Dernière modification par Hizoka (Le 15/04/2013, à 15:46)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2 Le 15/04/2013, à 13:57

pingouinux

Re : [resolu] recherche de doublon parmis une liste et traitement

Bonjour,

Hizoka a écrit :

D'ailleurs pourquoi cela ne fonctionne-t-il pas ?

find "${PWD}" -name "*.txt" -empty | sed 's/.txt$//' | md5sum

C'est parce que md5sum s'applique au stdout des commandes qui précèdent. Ceci te donnerait le même résultat :

find "${PWD}" -name "*.txt" -empty | sed 's/.txt$//' >out
md5sum out

Je réfléchis aux autres questions.

Hors ligne

#3 Le 15/04/2013, à 14:01

Hizoka

Re : [resolu] recherche de doublon parmis une liste et traitement

pingouinux a écrit :

C'est parce que md5sum s'applique au stdout des commandes qui précèdent. Ceci te donnerait le même résultat :

find "${PWD}" -name "*.txt" -empty | sed 's/.txt$//' >out
md5sum out

Nop déjà testé smile
il me renvoie le md5sum du fichier et non de son contenu, tout comme md5sum < out

merci de te pencher sur mon soucis smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 15/04/2013, à 14:16

pingouinux

Re : [resolu] recherche de doublon parmis une liste et traitement

Voici le test que j'ai fait :

$ find "${PWD}" -name "*.txt" -empty | sed 's/.txt$//' | md5sum
21c2897d8b4d228b124436e48455fbc1  -

$ find "${PWD}" -name "*.txt" -empty | sed 's/.txt$//' >out
$ md5sum out
21c2897d8b4d228b124436e48455fbc1  out

Et voici un premier jet pour ce que tu demandais (il reste à ne garder que le basename des fichiers) :

$ while read; do md5sum "${REPLY/%.txt}"; done < <(find "${PWD}" -name "*.txt" -empty) | sort | awk 'BEGIN{ORS=""}{if(t[$1]) sep=" @@ ";else {sep="";print "\n"} t[$1]=1;print sep $2}END{print "\n"}'

/tmp/tst/fichier_0000.pgm @@ /tmp/tst/fichier_0001.pgm @@ /tmp/tst/fichier_0010.pgm
/tmp/tst/fichier_0003.pgm
/tmp/tst/fichier_0002.pgm

Hors ligne

#5 Le 15/04/2013, à 14:23

pingouinux

Re : [resolu] recherche de doublon parmis une liste et traitement

Voilà :

$ while read; do md5sum "${REPLY/%.txt}"; done < <(find "${PWD}" -name "*.txt" -empty) | sort | awk 'BEGIN{ORS=""}{if(t[$1]) sep=" @@ ";else {sep="";print "\n"} t[$1]=1;sub(".*/","",$2);print sep $2}END{print "\n"}'

fichier_0000.pgm @@ fichier_0001.pgm @@ fichier_0010.pgm
fichier_0003.pgm
fichier_0002.pgm

Hors ligne

#6 Le 15/04/2013, à 14:24

Hizoka

Re : [resolu] recherche de doublon parmis une liste et traitement

while read; do md5sum "${REPLY/%.txt}"; done < <(find "${PWD}" -name "*.txt" -empty) | sort | awk 'BEGIN{ORS=""}{if(t[$1]) sep=" @@ ";else {sep="";print "\n"} t[$1]=1;print sep $2}END{print "\n"}' | sort

/tmp/test/4_Sous-titres_fra0001.pgm
/tmp/test/4_Sous-titres_fra0063.pgm @@ /tmp/test/4_Sous-titres_fra0101.pgm @@ /tmp/test/4_Sous-titres_fra0484.pgm @@ /tmp/test/4_Sous-titres_fra0607.pgm
/tmp/test/4_Sous-titres_fra0137.pgm
/tmp/test/4_Sous-titres_fra0146.pgm
/tmp/test/4_Sous-titres_fra0151.pgm @@ /tmp/test/4_Sous-titres_fra0414.pgm
/tmp/test/4_Sous-titres_fra0200.pgm @@ /tmp/test/4_Sous-titres_fra0775.pgm
/tmp/test/4_Sous-titres_fra0202.pgm @@ /tmp/test/4_Sous-titres_fra0631.pgm
/tmp/test/4_Sous-titres_fra0322.pgm
/tmp/test/4_Sous-titres_fra0336.pgm @@ /tmp/test/4_Sous-titres_fra0342.pgm
/tmp/test/4_Sous-titres_fra0341.pgm
/tmp/test/4_Sous-titres_fra0343.pgm
/tmp/test/4_Sous-titres_fra0370.pgm
/tmp/test/4_Sous-titres_fra0463.pgm
/tmp/test/4_Sous-titres_fra0527.pgm
/tmp/test/4_Sous-titres_fra0548.pgm
/tmp/test/4_Sous-titres_fra0581.pgm
/tmp/test/4_Sous-titres_fra0587.pgm
/tmp/test/4_Sous-titres_fra0600.pgm @@ /tmp/test/4_Sous-titres_fra0827.pgm
/tmp/test/4_Sous-titres_fra0626.pgm
/tmp/test/4_Sous-titres_fra0628.pgm
/tmp/test/4_Sous-titres_fra0675.pgm
/tmp/test/4_Sous-titres_fra0738.pgm
/tmp/test/4_Sous-titres_fra0748.pgm
/tmp/test/4_Sous-titres_fra0840.pgm
/tmp/test/4_Sous-titres_fra0842.pgm

Cool ca smile merci pingouinux !

Je vais voir si ca me permet d'arriver à mes fins !

PS : y a moyen de virer le 1er saut de ligne sans ajouter un sed ?

Edit, je prefere avec les adresses completes, plus facile à gerer.

Dernière modification par Hizoka (Le 15/04/2013, à 14:25)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#7 Le 15/04/2013, à 14:31

pingouinux

Re : [resolu] recherche de doublon parmis une liste et traitement

PS : y a moyen de virer le 1er saut de ligne sans ajouter un sed ?

Exigeant, avec ça…:)

$ while read; do md5sum "${REPLY/%.txt}"; done < <(find "${PWD}" -name "*.txt" -empty) | sort | awk 'BEGIN{ORS=""}{if(t[$1]) sep=" @@ ";else {sep="";if(NR>1)print "\n"} t[$1]=1;sub(".*/","",$2);print sep $2}END{print "\n"}'
fichier_0000.pgm @@ fichier_0001.pgm @@ fichier_0010.pgm
fichier_0003.pgm
fichier_0002.pgm

Dernière modification par pingouinux (Le 15/04/2013, à 14:32)

Hors ligne

#8 Le 15/04/2013, à 14:33

Hizoka

Re : [resolu] recherche de doublon parmis une liste et traitement

y a  moyen de le faire avec la version aux adresses completes ? tongue

merki !!


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#9 Le 15/04/2013, à 14:38

pingouinux

Re : [resolu] recherche de doublon parmis une liste et traitement

y a  moyen de le faire avec la version aux adresses completes ?

Tu as aussi le droit de chercher un peu…:)
Il suffit de virer ceci dans la commande : sub(".*/","",$2);

Hors ligne

#10 Le 15/04/2013, à 14:44

Hizoka

Re : [resolu] recherche de doublon parmis une liste et traitement

J'ai essayé de comparer les awk mais, c'est vraiment un truc que j'arrive pas à piger ce programme...

merci beaucoup !!


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#11 Le 15/04/2013, à 15:25

Hizoka

Re : [resolu] recherche de doublon parmis une liste et traitement

bon je viens de tester des trucs mais ca passe pas...

Une idée de comment lui faire comprendre simplement ceci :
=> fichier_0009.pgm @@ fichier_1559.pgm @@ fichier_1589.pgm
remplace les fichiers fichier_1559.pgm.txt  fichier_1589.pgm.txt par fichier_0009.pgm.txt

est-on obligé de passer par une boucle ?

PS, j'ai essayé avec ln mais pas reussis non plus...

Dernière modification par Hizoka (Le 15/04/2013, à 15:26)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#12 Le 15/04/2013, à 15:45

Hizoka

Re : [resolu] recherche de doublon parmis une liste et traitement

Bon bah avec une boucle ca le fera, tant pis.

Encore merci a toi pingouinux

Resolu


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne