[Shell] Extraction chaîne caractère

tonio4531 -  
 tonio4531 -
Bonjour à tous,

j'ai un fichier fic.txt dans lequel j'ai une ligne telle que celle-ci :
7894122;;ALL;192007;192007;P;A;192008

J'aurai besoin de récuperer le caractère 'P', afin de le mettre dans une variable et faire des tests par la suite.
J'ai essayé ça mais ça ne fonctionne pas:

VAR =`cat fic.txt | awk -F";" '{print $6}'`

awk -F";" pour designer le caractère de séparation et $6 pour signifier que le caractère voulu est en 6ème position (après le 5ème ";"

Si vous avez d'autres méthodes me permettant d'arriver à mes fins, je vous en serait très reconnaissant.

Merci beaucoup.
Configuration: Windows 2000
Firefox 2.0.0.9

4 réponses

  1. gnuoulipo
     
    Sinon cut fait très bien l'affaire si les ; sont des déléminteurs et que le nombre de champs a un sens.

    [pierre@localhost ~]$ cut -d\; -f6 ./fitest.txt
    P
    [pierre@localhost ~]$
    Attention de protéger le ; par l'antislash.

    Le truc classique
    [pierre@localhost ~]$ cut -d: -f1 /etc/passwd
    root
    bin
    daemon
    adm
    lp
    ....
    1
    1. tonio4531
       
      D'accord merci pour cette seconde possibilité.

      En fait après avoir récupéré ce 'P' dans ma variable VAR, j'aimerai faire un test style :

      if [ $VAR='P' ]
      then
      echo "ca marche"
      else
      echo "ca marche pas"



      Et bizarrement ça marche pas, pouvez vous svp me renseigner sur la syntaxe exacte du test ?
      merci par avance
      0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    pas d'espace avant et après le signe égal
    root@debian:~# cat fic.txt
    7894122;;ALL;192007;192007;P;A;192008
    root@debian:~# VAR=`cat fic.txt | awk -F";" '{print $6}'`
    root@debian:~# echo $VAR
    P
    root@debian:~#
     

    0
    1. tonio4531
       
      Ok je te remercie bien pour ta réponse, c'était juste une ânerie finalement!
      Désolé du dérangement!
      0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,
    root@debian:~# cat fic.txt
    7894122;;ALL;192007;192007;P;A;192008
    root@debian:~# cat p.sh
    #!/bin/bash
    
    VAR=`cat fic.txt | awk -F";" '{print $6}'`
    
    if [ $VAR = 'P' ]
    then
    echo "ça marche"
    else
    echo "ça ne marche pas"
    fi
    root@debian:~# sh p.sh
    ça marche
    root@debian:~# sed -i 's/P/Z/' fic.txt
    root@debian:~# cat fic.txt
    7894122;;ALL;192007;192007;Z;A;192008
    root@debian:~# cat p.sh
    #!/bin/bash
    
    VAR=`cat fic.txt | awk -F";" '{print $6}'`
    
    if [ $VAR = 'P' ]
    then
    echo "ça marche"
    else
    echo "ça ne marche pas"
    fi
    root@debian:~# sh p.sh
    ça ne marche pas
    

    0
    1. tonio4531
       
      Bien vu je te remercie.
      Ca marche en fait chez moi également.
      Simplement j'avais mis #!/bin/bash en haut du fichier ...
      Forcément avec #!/bin/sh ça marche mieux.
      Merci bon aprem ++
      0
  4. gnuoulipo
     
    Oui, c'est ce que je voulais répondre : attention de bien placer des espaces entre chaque élément [ '$VAR" = 'P' ] et de protéger par quote ou guillemets.

    [pierre@localhost ~]$ VAR=$(cut -d\; -f6 ./fitest.txt)
    [pierre@localhost ~]$ if [ "$VAR" = "P" ]
    > then
    > echo VRAI;
    > else
    > echo FAUX
    > fi
    VRAI
    [pierre@localhost ~]$
    0