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

Résolu
Trezeg Messages postés 81 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  2. Trezeg Messages postés 81 Statut Membre 2
     
    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
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    grep | awk, quel gachis de resources :-))

    inputFile=` awk 'NR=='$2' && /bcp/ {print $4}' $currv/batchMngt/batches/$1`
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Ben si on peut plus ce faire plaisir aussi ;-)))

      Bien joué ;-)
      0
    2. Trezeg Messages postés 81 Statut Membre 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
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > Trezeg Messages postés 81 Statut Membre
         
        Même réponse qu'en #7 faut définir le paramètre $2 !!!

        ;-))
        0
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      J'ai trop vu de cat | grep | grep | awk .. j'en souffre encore :-)(
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Trezeg Messages postés 81 Statut Membre 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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
      1. Trezeg Messages postés 81 Statut Membre 2 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Wahh,
        j'suis une vraie buse...
        Merci jipicy ;-)
        0
      2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > Trezeg Messages postés 81 Statut Membre
         
        Change de pseudo alors ;-DDD

        ;-)
        0