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/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

ehmicky a écrit :

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

ehmicky a écrit :

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 hmm


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

pingouinux a écrit :

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

Hizoka a écrit :

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