[Shell] Extraction chaîne caractère
tonio4531
-
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.
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:
- [Shell] Extraction chaîne caractère
- Caractère ascii - Guide
- Classic shell - Télécharger - Personnalisation
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
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
....
[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
....
Salut,
pas d'espace avant et après le signe égal
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:~#
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
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 ~]$
[pierre@localhost ~]$ VAR=$(cut -d\; -f6 ./fitest.txt)
[pierre@localhost ~]$ if [ "$VAR" = "P" ]
> then
> echo VRAI;
> else
> echo FAUX
> fi
VRAI
[pierre@localhost ~]$
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