[SCRIPT UNIX] comment faire un substring?

comment faire un substring? [SCRIPT UNIX] - Programmation

Marsh Posté le 13-02-2002 à 20:32:58    

voila, je voudrais recuperer un champ de caractere dans une variable en script shell.
Par exemple: recuperer le chiffre dans "A002B"
 
Merci d'avance

Reply

Marsh Posté le 13-02-2002 à 20:32:58   

Reply

Marsh Posté le 14-02-2002 à 09:58:33    

UP!
 
svp, par exemple, A102B -> 102 (entre lé 2ème et 4ème caractère)
 
En gros, faire comme un substring en Java

Reply

Marsh Posté le 14-02-2002 à 10:53:12    

"man cut"


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 14-02-2002 à 11:52:36    

Le mieux c'est d'utiliser un petit utilitaire, ca simplifie la vie.
Pour ma part je prefere awk, donc la commande suivante devrait te satisfaire :
 
echo $"nom_variable" | awk -F[a-x] '{print $2}'
 
Tu pourrais faire un "cut -d ... -f ..." mais seulement si ta chaine de caractere commence toujours par un 'A' et finie par un 'B' sinon ca devient aussi simplie d'utiliser awk.

Reply

Marsh Posté le 14-02-2002 à 14:19:46    

pour faire un découpage entre 2 positions, je ne vois pas ce qu'il peut y avoir de meilleur que le cut:
 
cut -c2-6 "abcdefghij" donne bcdef
 
ya pas plus simple


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 14-02-2002 à 14:28:20    

Ouais mais seulement si les positions des colonnes sont toujours les memes!
Si les longueurs de champs sont variables tu peut plus, a moins d'utiliser un separateur, mais pour cela il faut que ce soit toujours le meme(par exemple le caractere 'A';).
Bref dans tous les cas il faut un invariant pour 'cut'.
 
Sinon tu cree un shell script complique avec des boucles 'cut', du coup autant utiliser des utilitaires deja fourni du genre 'awk'

Reply

Marsh Posté le 14-02-2002 à 14:46:18    

je vois pas le pb.
 
Il cherche à récupérer une sous-chaine entre 2 positions.
 
C'est exactement ce que fait la commande que j'ai écrite, quelque soit la chaine


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 14-02-2002 à 14:52:02    

Non c'est pas exactement ce qu'il a decrit, il a dit qu'il voulait recuperer un champ de caractere(ici des chiffres) dans une chaine generale.
Pour reprendre l'exemple "A002B" et pour clarifier : il n'a pas preciser que les chaines commencent toutes par 'A' et finissent par 'B', ni meme qu'elles commencent par un seul caractere et finissent par un seul caractere.
 
Donc tu n'as pas d'invariant significatif a passer au 'cut'.
tu dois donc te contenter de recuperer des sous-chaines de chiffres situees entre 2 chaines de caracteres quelconques de longueur variables, d'ou l'utilisation de 'awk'

Reply

Marsh Posté le 14-02-2002 à 15:27:11    

je ne comprends pas du tout ce que tu veux dire.
 
Mais ce qu'il dit lui est clair:
 
 

Citation :


UP!
 
svp, par exemple, A102B -> 102 (entre lé 2ème et 4ème caractère)
 
En gros, faire comme un substring en Java  


 
le substring java, c'est entre position de départ et position d'arrivée. le "cut -c2-4" prend bien entre le 2ème et le 4ème caractère, c'est exactement ce qu'il veut non ?


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 14-02-2002 à 15:41:50    

Bon effectivement je me souviennait plus exactement ce que fait un sub-string en Java(plus touchait depuis un bout de temps).
Mais il n'empeche qu'il n'a pas demande comment refaire exactement un sub-string mais il l'a pris comme exemple !
'En gros, faire comme un substring en Java'
 
Donc ca ne remet pas en cause mon explication, en plus je ne suis pas contre ton 'cut' je dis juste que son domaine d'application est limite(comme tout bon cut qui se respecte d'ailleurs :)).
 
Sinon le mieux ca serait que fdl nous reponde plutot qu'on continue cette bataille dialectique :)

Reply

Marsh Posté le 14-02-2002 à 15:41:50   

Reply

Marsh Posté le 14-02-2002 à 15:44:09    

Tiens je viens de penser a un truc si tu ne comprends pas ce que je voulais dire : essaye d'appliquer ton 'cut' a :
 
ADSA001DAS
AWE002ERTY
 
Ben pb !

Reply

Marsh Posté le 14-02-2002 à 16:11:28    

d'accord, mais ce n'est pas ce qu'il recherche à mon avis
 
Quand il a dit "Rechercher le chiffre", c'est que probablement il a des champs formatés de la sorte et il veut lire les caractères du milieu
 
 
Enfin, je me comprends :p


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 14-02-2002 à 16:14:06    

D'un autre cote ca serait sympa que fdl nous dise ce qu'il en est.
Parceque la, on s'est serieusement demenes dans la discussion avec argument a l'appui...
En tout cas il devrait y trouver son compte :)

Reply

Marsh Posté le 14-02-2002 à 16:16:05    

toutafait


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed