[Shell] Extraction chaîne caractère

Fermé
tonio4531 - 27 mai 2008 à 13:33
 tonio4531 - 27 mai 2008 à 14:52
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.
A voir également:

4 réponses

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
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
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
27 mai 2008 à 14:03
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
Ok je te remercie bien pour ta réponse, c'était juste une ânerie finalement!
Désolé du dérangement!
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
27 mai 2008 à 14:40
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
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
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