Trouver les morceaux de doublons

Résolu
nicdu40 Messages postés 27 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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:

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é

5 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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 :

    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é....
    1
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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 :

    cat /etc/squid3/banner-ads.acl | cut -c 1-5 | sort | uniq


    Bonne chance
    0
  3. nicdu40 Messages postés 27 Statut Membre 1
     
    oui effectivement , les 5 caractères peuvent etre n'importe ou , c'est pour ça que je pose cette question
    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
    0
  4. nicdu40 Messages postés 27 Statut Membre 1
     
    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 !!!!!

    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question