#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,
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
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é
il me renvoie le md5sum du fichier et non de son contenu, tout comme md5sum < out
merci de te pencher sur mon soucis
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 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 ?
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