[Shell] Sélection de la n-ième chaine

Résolu
Bonjour,

J'aimerais savoir comment récupérer un élément de la n-ième occurrence d'une chaine de caractère. Je m'explique :
dans un de mes shells, je lance la commande suivante
inputFile=`grep bcp $currv/batchMngt/batches/$1 | awk '{print $4}'`
Mon but est de pouvoir réutiliser cette ligne pour la seconde ligne contenant bcp, puis la troisième, etc...

Merci pour votre aide.

Trez
Configuration: SunOS 5.9

5 réponses

  1. Modérateur
    Salut,

    J'ai du mal à comprendre ce que tu veux exactement !

    D'abord tu parles de "récupérer un élément de la n-ième occurrence d'une chaine de caractère", puis ensuite d'après ce que je comprend, tu veux récupérer chaque ligne (enfin chaque champ $4) dans une variable...

    Peux-tu m'éclairer ? Merci.
    0
    1. Salut,

      En fait tout part d'une procédure stockée crée en Sybase et qui appelle mon shell.
      Ce dernier prend en paramètre un nom de fichier pour lequel il va réaliser un traitement.
      $ myShell.ksh myFile.txt
      Ce shell recherche dans le fichier, le 4eme champ de la (ou des) ligne contenant le mot bcp.
      J'aimerais pouvoir modifier mon shell de facon a lui ajouter un paramètre de rang qui me permettra de continuer à récupérer le 4eme champ du second paramètre
      $ myShell.ksh myFile.txt 3
      Doit me donner le 4eme champs de la 3eme ligne contenant bcp.

      Voilou

      Merci
      0
      1. Modérateur
        En reprenant ta syntaxe :
        inputFile=`grep bcp $currv/batchMngt/batches/$1 | awk '{print $4}' | sed -n ''$2'p'`
        Peut être qu'une solution existe avec awk (ce qui serait plus simple), mais là je ne l'ai pas...

        Edit : J'ai trouvé :
        inputFile=`grep bcp $currv/batchMngt/batches/$1 | awk 'NR=='$2'{print $4}'`
        
        --
        Z'@+...che.<code>JP : Zen, my Nuggets ! ;-)
        Le savoir n'est bon que s'il est partagé.
        0
        1. Contributeur
          grep | awk, quel gachis de resources :-))

          inputFile=` awk 'NR=='$2' && /bcp/ {print $4}' $currv/batchMngt/batches/$1`
          0
          1. Modérateur
            Ben si on peut plus ce faire plaisir aussi ;-)))

            Bien joué ;-)
            0
          2. Merci dubcek mais...
            $ awk 'NR=='$2' && /bcp/ {print $4}' test.txt
            awk: syntax error near line 1
            awk: bailing out near line 1
            $
            Ou encore
            $ set InputFile=`awk 'NR=='$2' && /bcp/ {print $4}' test.txt`
            awk: syntax error near line 1
            awk: bailing out near line 1
            $
            J'ai également essayé avec nawk .
            $ nawk 'NR=='$2' && /bcp/ {print $4}' test.txt
            nawk: syntax error at source line 1
             context is
                    NR== >>>  && <<<
            nawk: bailing out at source line 1
            $


            :-\\
            0
          3. Modérateur
            @TrezegMême réponse qu'en #7 faut définir le paramètre $2 !!!

            ;-))
            0
          4. Contributeur
            J'ai trop vu de cat | grep | grep | awk .. j'en souffre encore :-)(
            0
        2. Re- Jipicy
          $ cat test.txt
          bcp secondChamp troisiemeChamp quatriemeChamp
          bcp secondChamp troisiemeChamp quatriemeChamp2
          bcp secondChamp troisiemeChamp quatriemeChamp3
          $
          $ grep bcp test.txt | awk '{print $4}'
          quatriemeChamp
          quatriemeChamp2
          quatriemeChamp3
          $
          $ grep bcp test.txt | awk '{print $4}' | sed -n ''$2'p'
          quatriemeChamp
          quatriemeChamp2
          quatriemeChamp3


          Ca ne filtre pas :-///
          0
          1. Modérateur
            Ben c'est normal, le paramètre "$2" n'est pas défini ;-))
            jp@MDK:~/tmpfs ssh$ set 1 2
            jp@MDK:~/tmpfs ssh$ grep bcp bar.txt | awk '{print $4}' | sed -n ''$2'p'
            quatriemeChamp2
            jp@MDK:~/tmpfs ssh$ grep bcp bar.txt | awk '{print $4}' | sed -n ''$1'p'
            quatriemeChamp
            jp@MDK:~/tmpfs ssh$
            
            ;-)
            0
          2. @jipicyWahh,
            j'suis une vraie buse...
            Merci jipicy ;-)
            0
          3. Modérateur
            @TrezegChange de pseudo alors ;-DDD

            ;-)
            0