Shell : rediriger un pipe vers deux commandes

Résolu
Bonjour à tous,

Je cherche à savoir s'il est possible d'utiliser les pipes shell de façon à rediriger la sortie d'une première commande vers deux autres.
Mon exemple :
J'ai ce style de script :
grep test texte.log | cut -d" " -f10 > fich1.tmp
grep test texte.log | cut -d" " -f2 > fich2.tmp
Or le premier grep est très long car le fichier texte.log est très gros. J'aimerais éviter de repasser la commande deux fois.
Je peux toujours passer par un fichier intermédiare créé pour l'occasion, mais j'aimerais éviter et faire plus "propre" si possible.

Merci d'avance !

6 réponses

  1. Contributeur
    hello
    avec awk
    awk '/test/ { print $10 > "fich1.tmp" ; print $2 > "fich2.tmp"}' texte.log
    1. Ma commande d'origine n'est pas pas aussi simple malheureusement...
      Mais bon, je n'ai "plus" qu'à apprendre comment fonctionne awk ! ^^"

      Merci de ton aide.
      1. Contributeur
        avec 1 grep et plusieurs cut :
        grep test texte.log | tee >(cut -d " " -f 10 >fich1.tmp) > >(cut -d " " -f 2 >fich2.tmp)
        1. En utilisant les redirections tee de ton exemple, j'obtiendrais ça :

          grep "Login" texte.log | grep -v super | tee >(cut -d" " -f12- | cut -d"[" -f1 > fich1.test) > >(grep 10.20.30.40 | wc -l > fich2.tmp) > >(grep 50.60.70.80 | wc -l > fich3.tmp) 
          


          Ça à l'air de répondre à mon besoin. Je vais tester avec un time, pour vérifier si c'est vraiment plus efficace, mais il n'y a pas de raison ! :)

          Merci !

          EDIT : Arf, non, trois commandes, ça n'a pas l'air possible. Je cherche.
          1. Contributeur
            il ne peut y avoir que le dernier avec > >(commande)
            essayer
            grep "Login" texte.log | grep -v super | tee >(cut -d" " -f12- | cut -d"[" -f1 > fich1.test) >(grep 10.20.30.40 | wc -l > fich2.tmp) > >(grep 50.60.70.80 | wc -l > fich3.tmp) 

            en résumé
            grep ... ¦ tee >(commande) >(commande) >(commande) ... > >(commande)
            1. Oui je viens de voir ça. Cette fois, c'est bon et ça va nettement plus vite que de faire 3 grep !
              Merci pour ton aide.
            2. Contributeur
              Cette façon de faire vient d'où ? je ne l'ai pas trouver dans la page man de tee.
            3. Contributeur
              Salut,

              info tee ;-))
            4. Contributeur
              tee ne fait que copier la sortie standard dans des fichiers
              pour cette notation bash >(commande), voir Substitution de Processus
            5. Contributeur
              Dans ce cas là, la commande tee est superflue alors.
              Je ne comprends pas le double > pour le dernier argument.