Trouver les morceaux de doublons
Résolu
Bonjour,
je m'explique:
j'ai un fichier ( pour squid ) assez conséquent, je voudrais afficher les parties de plus de 5 caracteres qui se repètent le plus souvent pour ensuite faire une chaine regex, donc voila:
mon fichier contient par exemple:
je voudrais en sortie :
et si possible:
j'ai essayé mais je n'y arrive pas ...
merci de votre aide
ps : il existe peut-etre déja un script qui pourrait me faire automatiquement mes chaines regex, mais j'ai pas trouvé
je m'explique:
j'ai un fichier ( pour squid ) assez conséquent, je voudrais afficher les parties de plus de 5 caracteres qui se repètent le plus souvent pour ensuite faire une chaine regex, donc voila:
mon fichier contient par exemple:
advert.bayarea.com advert.gittigidiyor.com advert.hi-media.com adverticum.com /sites/details/google.fr google.fr/media
je voudrais en sortie :
advert: advert.bayarea.com advert.gittigidiyor.com advert.hi-media.com adverticum.com
et si possible:
media: google.fr/media advert.hi-media.com
j'ai essayé mais je n'y arrive pas ...
while IFS= read -r LINE; do cut -c1-5 $LINE grep "$LINE" /etc/squid3/banner-ads.acl done < /etc/squid3/banner-ads.acl
merci de votre aide
ps : il existe peut-etre déja un script qui pourrait me faire automatiquement mes chaines regex, mais j'ai pas trouvé
A voir également:
- Trouver les morceaux de doublons
- Trouver adresse mac - Guide
- Doublons photos - Guide
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Ou trouver l'adresse ip - Guide
- Supprimer les doublons excel - Guide
5 réponses
Bah tu n'as pas le choix il faut boucler pour chaque valeur de i allant de 1 à a longueur de LINE - 5 et construire ta commande cut :
Le problème c'est qu'en suite pour chaque tronçon il faut maintenir un compteur et ça risque de faire pas mal de tronçons... Personnellement je ne ferais pas ce genre de programme en shell, un langage comme python ou awk me paraît plus adapté....
for i in $(seq 1 $(expr length $LINE)) do troncon=$(cut -c$i-$(($i + 5)) $LINE) echo $troncon done
Le problème c'est qu'en suite pour chaque tronçon il faut maintenir un compteur et ça risque de faire pas mal de tronçons... Personnellement je ne ferais pas ce genre de programme en shell, un langage comme python ou awk me paraît plus adapté....
Je n'ai pas très bien compris ce que tu voulais faire, surtout que visiblement tes 5 caractères peuvent être n'importe où.
Si tu veux les 5 premiers caractères de chaque ligne sans doublon tu peux écrire un truc du genre :
Bonne chance
Si tu veux les 5 premiers caractères de chaque ligne sans doublon tu peux écrire un truc du genre :
cat /etc/squid3/banner-ads.acl | cut -c 1-5 | sort | uniq
Bonne chance
oui effectivement , les 5 caractères peuvent etre n'importe ou , c'est pour ça que je pose cette question
dans mon exemple:
de plus je voudrais qu'en sortie j'ai:
merci quand même
dans mon exemple:
while IFS= read -r LINE; do cut -c1-5 $LINE <----- cette ligne devrait etre modifiée grep "$LINE" /etc/squid3/banner-ads.acl done < /etc/squid3/banner-ads.acl
de plus je voudrais qu'en sortie j'ai:
#media: #google.fr/media #advert.hi-media.com
merci quand même
YES merci
en fait j'avais un probleme avec cut: xxxxx Aucun fichier ou dossier de ce type
mais bon maintenant c'est ok , me reste plus qu'a extraire du resultat les repetitions les plus nombreuses , et c'est bon. merci mamiemando !!!!!
ce qui donne
image :
dam/imp/surfaces/mail_signin/v3/(images|mai)
http://www.google.fr/images/nav_logo132.png
lpdw.free.fr/images/fondbob.jpg
/images/containercut-bg-container.png
/images/header-bg.png
206.165.5.162/images/gcanim.gif
a7corp.com/images/link.php
ad101com-images.adbureau.net
en fait j'avais un probleme avec cut: xxxxx Aucun fichier ou dossier de ce type
mais bon maintenant c'est ok , me reste plus qu'a extraire du resultat les repetitions les plus nombreuses , et c'est bon. merci mamiemando !!!!!
while read LINE do for i in $(seq 1 $(expr length "$LINE")) do troncon=$(echo $LINE | cut -c$i-$(($i + 4)) ) if [ "${#troncon}" -gt 4 ] then #echo "${#troncon}" echo "$troncon :" grep "$troncon" /etc/squid3/banner-ads.acl fi done done < /etc/squid3/banner-ads.acl
ce qui donne
image :
dam/imp/surfaces/mail_signin/v3/(images|mai)
http://www.google.fr/images/nav_logo132.png
lpdw.free.fr/images/fondbob.jpg
/images/containercut-bg-container.png
/images/header-bg.png
206.165.5.162/images/gcanim.gif
a7corp.com/images/link.php
ad101com-images.adbureau.net
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu dois pouvoir mémoriser tes compteurs avec ce genre de table de hashage (pour chaque tronçon tu maintiens un compteur) :
https://stackoverflow.com/questions/1494178/how-to-define-hash-tables-in-bash
Bonne chance
https://stackoverflow.com/questions/1494178/how-to-define-hash-tables-in-bash
Bonne chance