Forum Programmation.shell simplifiage

Posté par (page perso) .
Tags : aucun
0
24
fév.
2010
Bonjour,

J'ai fais un script qui me permet de connaître le nombre de comptes créer dans thunderbird en parsant le fichier prefs.js de l'utilisateur. Mais ça me fait une ligne de commande... bien grasse dirons-nous :

numserveur=`grep mail.server.server'.*'.type prefs.js|awk -F. '{print $3}'|sort -n|cut -c 7-|xargs|awk '{print $NF}'`

Je cherche toutes les lignes qui contiennent mail.server.server'.*'.type
Je ne prend que la partie server';*'
Je trie dans l'ordre numérique
Je vire les 6 premiers caractères
Je vire les retour chariots
Je récupère le dernier élément.
Ouf, j'ai enfin le nombre de comptes!

Mais bon j'ai l'impression d'utiliser un bulldozer pour aplatir une taupinière, ne connaîtriez vous pas un méthode plus élégante de faire la chose?

Merci
  • # Re: simplifiage

    Posté par (page perso) . Évalué à 3.

    Pour les gens qui n'ont pas de Thunderbird, tu peux montrer quelques lignes du prefs.js que tu lis ?

    J'ai l'impression qu'il doit ressembler à :

    mail.server.server1.type XYZ
    mail.server1.address mail.example.org
    mail.server.server2.type ABC
    mail.server2.address mail.example.com
    ...


    Si c'est bien le cas :

    grep -c mail.server.server'.*'.type prefs.js
    • [^] # Re: simplifiage

      Posté par (page perso) . Évalué à 1.

      Ça ressemble à :

      user_pref("mail.server.server3.check_time", 100);
      user_pref("mail.server.server3.directory-rel", "[ProfD]Mail/Nouvelles et Blogs");
      user_pref("mail.server.server3.hostname", "Nouvelles et Blogs");
      user_pref("mail.server.server3.login_at_startup", true);
      user_pref("mail.server.server3.name", "Nouvelles et Blogs");
      user_pref("mail.server.server3.type", "rss");
      user_pref("mail.server.server3.userName", "nobody");


      J'ai un doute sur l'affichage des doubles quote qui dans l'aperçu se transforment en "
    • [^] # Re: simplifiage

      Posté par (page perso) . Évalué à 1.

      Pour le grep -c, je ne suis pas certains que le numéro des serveurs soit bien continu, il peu y avoir des trous, donc je cherche bien le n° de serveur le plus important
      • [^] # Re: simplifiage

        Posté par . Évalué à 2.

        ok, je me demandais si un simple wc -l suffisait (mais grep -c, c'était incontestablement mieux), mais vu ce commentaire, la réponse est non.

        ton xargs | awk pour récupérer la dernière ligne peut se remplacer par un tail

        et grep | awk | cut par un sed

        Du coup :
        grep mail.server.server'.*'.type prefs.js | sort -n |tail -1 | sed 's/.\{29\}\([0-9]*\).*/\1/'
        • [^] # Re: simplifiage

          Posté par . Évalué à 3.

          oops, copié/collé la mauvaise ligne de l'historique du shell ...

          sed -n 's/user_pref("mail.server.server\([0-9]*\)\.type.*/\1/p' prefs.js |sort -n | tail -1
          • [^] # Re: simplifiage

            Posté par . Évalué à 1.

            its really a fantastic forum to read out and I hope you will keep up the good work in future as well
  • # avec awk :

    Posté par . Évalué à 2.

    awk '/mail.server.server'.*'.type/ { split($0,a,".");server[a[3]]+=1;} END { for (i in server) { print i ": " server[i] " comptes"}}'
    • [^] # Re: avec awk :

      Posté par . Évalué à 2.

      Si tu veux le nombre de comptes total:
      awk '/mail.server.server'.*'.type/ { split($0,a,".");COMPTES+=1} END {print COMPTES}'
      • [^] # Re: avec awk :

        Posté par . Évalué à 3.

        Bon quelques explications :
        - je récupère les lignes mail.server.server'.*'.type
        - je splite (avec séparateur ".") dans un tableau nommé a. Je viens de me rendre compte que ça sert à rien ...
        - ensuite j'incrémente mon compteur.
        - enfin j'affiche le nombre de comptes.

        Plus simplement :
        awk '/mail.server.server'.*'.type/ { COMPTES+=1} END {print COMPTES}'
  • # Merci

    Posté par (page perso) . Évalué à 1.

    Merci à gaaaaaAab et totof2000 pour ces conseils judicieux et précieux!

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.