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:

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. Modérateur
    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
    1. Modérateur
      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
      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
        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