#1 Le 10/10/2011, à 15:48
- sabnac
isoler les chaines de caractères uniques d'un fichier texte
Bonjour,
je n'arrive pas à trouver un commande qui me permet d'isoler les chaînes de caractères uniques dans un fichier texte (par exemple un fichier texte avec plein de md5).
Je voudrais donc faire que seul soit affiché les chaines présentes une seul fois dans le fichier texte.
Merci d'avance;)
Hors ligne
#2 Le 10/10/2011, à 15:52
- Postmortem
Re : isoler les chaines de caractères uniques d'un fichier texte
Salut,
Tu pourrais donner un exemple du contenu de ton fichier ?
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#3 Le 10/10/2011, à 15:54
- pingouinux
Re : isoler les chaines de caractères uniques d'un fichier texte
Bonjour,
Je n'ai pas bien compris la question. Un petit exemple serait le bienvenu.
Hors ligne
#4 Le 10/10/2011, à 16:11
- Postmortem
Re : isoler les chaines de caractères uniques d'un fichier texte
Si j'ai bien compris, soit le fichier test.txt contenant ceci :
41c29aad808ccc1ece964e6b4ad348e1 test1
6c5d7c2631aa9261399c8abe383d3b7f test2
d7d91c3048fee24aa459b06edbcce3d4 test3
ec1814364389797a3d18b51f92bfb7e3 test4
476e61c0d97596dc6493d837a7c4af34 test5
ec1814364389797a3d18b51f92bfb7e3 test6
6c5d7c2631aa9261399c8abe383d3b7f test7
3f1f6042356fc8f98acd8a5f363a0185 test8
82e864e5e6e2fb298e34c11125954c77 test9
Les fichiers test2 et test7 ont le même md5.
Les fichiers test4 et test6 ont le même md5.
awk '{ nb[$1]++; ligne[$1]=$0 }
END { for (i in nb) {if (nb[i] == 1) print ligne[i]}}' test.txt
Qui nous donne :
476e61c0d97596dc6493d837a7c4af34 test5
d7d91c3048fee24aa459b06edbcce3d4 test3
3f1f6042356fc8f98acd8a5f363a0185 test8
41c29aad808ccc1ece964e6b4ad348e1 test1
82e864e5e6e2fb298e34c11125954c77 test9
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#5 Le 11/10/2011, à 08:16
- sabnac
Re : isoler les chaines de caractères uniques d'un fichier texte
Bonjour,
Voila Postmortem, tu as tout a fait compris. est-il possible de faire pareil avec un grep couplé à un cut?
Merci encore à tous;)
Hors ligne
#6 Le 11/10/2011, à 08:47
- Postmortem
Re : isoler les chaines de caractères uniques d'un fichier texte
Salut,
Avec grep mais sans cut :
while read -r
do
sum=${REPLY%% [ *]*}
[[ $(grep "$sum" test.txt | wc -l) -eq 1 ]] && echo "$REPLY"
done < test.txt
Edit : rajout de l'option -r à read pour ne pas supprimer les \ qui pourraient être dans les noms de fichiers
Dernière modification par Postmortem (Le 11/10/2011, à 10:01)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#7 Le 11/10/2011, à 12:47
- Postmortem
Re : isoler les chaines de caractères uniques d'un fichier texte
Salut,
sort $fichier.txt | uniq -u
ne suffit-t-il pas ?
Non... Enfin, si j'ai bien compris !
sabnac souhaite seulement afficher les lignes qui n'apparaissent qu'une fois.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#8 Le 11/10/2011, à 12:49
- ehmicky
Re : isoler les chaines de caractères uniques d'un fichier texte
Salut,
Autre solution, dans ton cas précis :
sort $fichier.txt | uniq -uw32
@Postmortem : désolé édit, j'avais oublié -w32 !
Dernière modification par ehmicky (Le 11/10/2011, à 12:50)
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#9 Le 11/10/2011, à 12:55
- Postmortem
Re : isoler les chaines de caractères uniques d'un fichier texte
Salut,
Autre solution, dans ton cas précis :sort $fichier.txt | uniq -uw32
@Postmortem : désolé édit, j'avais oublié -w32 !
Ah ben oui, c'est bien plus simple dis donc ! J'y savais pas que uniq faisait ça, me coucherai moins con !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#10 Le 11/10/2011, à 13:00
- ehmicky
Re : isoler les chaines de caractères uniques d'un fichier texte
C'est dommage par contre que le flag -f d'uniq ne permette que de choisir les n derniers champs plutôt que de fonctionner comme le flag -n de tail/head ou -k de sort
Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?
Hors ligne
#11 Le 11/10/2011, à 13:12
- pingouinux
Re : isoler les chaines de caractères uniques d'un fichier texte
Bonjour,
J'ai appris des choses avec les réponses de Postmortem et ehmicky.
Il y a cependant un truc que je n'ai pas compris dans cette ligne (Postmortem #6) :
sum=${REPLY%% [ *]*}
À quoi sert * dans [ *] ?
Merci d'avance
Hors ligne
#12 Le 11/10/2011, à 13:25
- Postmortem
Re : isoler les chaines de caractères uniques d'un fichier texte
Bonjour,
J'ai appris des choses avec les réponses de Postmortem et ehmicky.
Il y a cependant un truc que je n'ai pas compris dans cette ligne (Postmortem #6) :sum=${REPLY%% [ *]*}
À quoi sert * dans [ *] ?
Merci d'avance
C'est parce que le résultat d'un md5sum peut être de 2 formes :
<somme md5> nom-fichier # avec 2 espaces entre la somme et le nom du fichier
# ou
<somme md5> *nom-fichier # avec une espace et un * entre la somme et le nom du fichier
Quand il y a le caractère *, c'est qu'on a passé l'option -b (mode binaire) à md5sum.
Petite précision : le caractère * perd sa signification particulière entre crochets.
Dernière modification par Postmortem (Le 11/10/2011, à 13:26)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#13 Le 11/10/2011, à 14:29
- Hizoka
Re : isoler les chaines de caractères uniques d'un fichier texte
si pas besoin de "test*" :
var="41c29aad808ccc1ece964e6b4ad348e1 test1
6c5d7c2631aa9261399c8abe383d3b7f test2
d7d91c3048fee24aa459b06edbcce3d4 test3
ec1814364389797a3d18b51f92bfb7e3 test4
476e61c0d97596dc6493d837a7c4af34 test5
ec1814364389797a3d18b51f92bfb7e3 test6
6c5d7c2631aa9261399c8abe383d3b7f test7
3f1f6042356fc8f98acd8a5f363a0185 test8
82e864e5e6e2fb298e34c11125954c77 test9"
sed -n 's/ .*//p' <<< "${var}" | sort -u
3f1f6042356fc8f98acd8a5f363a0185
41c29aad808ccc1ece964e6b4ad348e1
476e61c0d97596dc6493d837a7c4af34
6c5d7c2631aa9261399c8abe383d3b7f
82e864e5e6e2fb298e34c11125954c77
d7d91c3048fee24aa459b06edbcce3d4
ec1814364389797a3d18b51f92bfb7e3
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#14 Le 11/10/2011, à 14:45
- Postmortem
Re : isoler les chaines de caractères uniques d'un fichier texte
si pas besoin de "test*" :
var="41c29aad808ccc1ece964e6b4ad348e1 test1 6c5d7c2631aa9261399c8abe383d3b7f test2 d7d91c3048fee24aa459b06edbcce3d4 test3 ec1814364389797a3d18b51f92bfb7e3 test4 476e61c0d97596dc6493d837a7c4af34 test5 ec1814364389797a3d18b51f92bfb7e3 test6 6c5d7c2631aa9261399c8abe383d3b7f test7 3f1f6042356fc8f98acd8a5f363a0185 test8 82e864e5e6e2fb298e34c11125954c77 test9" sed -n 's/ .*//p' <<< "${var}" | sort -u 3f1f6042356fc8f98acd8a5f363a0185 41c29aad808ccc1ece964e6b4ad348e1 476e61c0d97596dc6493d837a7c4af34 6c5d7c2631aa9261399c8abe383d3b7f 82e864e5e6e2fb298e34c11125954c77 d7d91c3048fee24aa459b06edbcce3d4 ec1814364389797a3d18b51f92bfb7e3
Ta commande affiche 2 lignes de trop. Si une somme md5 apparaît 2 fois ou plus, on ne l'affiche pas. Du moins, c'est ce que j'ai compris de ce qui était demandé !
Dernière modification par Postmortem (Le 11/10/2011, à 14:46)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#15 Le 11/10/2011, à 21:44
- Hizoka
Re : isoler les chaines de caractères uniques d'un fichier texte
y a pas de ligne en double la...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#16 Le 11/10/2011, à 22:16
- Levi59
Re : isoler les chaines de caractères uniques d'un fichier texte
Il veut que les ligne en double dans le fichier 1 n’apparaissent pas dans le fichier 2 enfin c'est ce que j'ai cru comprendre...
Hors ligne
#17 Le 11/10/2011, à 22:34
- Hizoka
Re : isoler les chaines de caractères uniques d'un fichier texte
donc je suis bon non ?
il faut juste rediriger la sortie
sed -n 's/ .*//p' fichier1 | sort -u > fichier2
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#18 Le 11/10/2011, à 23:01
- Postmortem
Re : isoler les chaines de caractères uniques d'un fichier texte
Moi j'ai compris qu'il voulait pas afficher s'il y avait 2 fois la même somme md5 (peu importe le nom du fichier).
Sinon, ceci suffit alors :
sort -u -k 1,1 fichier
Edit : si le fichier est comme ça :
toto
titi
toto
Il veut que ça sorte que titi
Enfin, faudra qu'il nous redise !
Dernière modification par Postmortem (Le 11/10/2011, à 23:14)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#19 Le 14/10/2011, à 09:50
- sabnac
Re : isoler les chaines de caractères uniques d'un fichier texte
Merci pour toutes vos réponses:)
Hors ligne