comment faire un substring? [SCRIPT UNIX] - Programmation
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
Marsh Posté le 14-02-2002 à 10:53:12
"man cut"
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.
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
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'
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
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'
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 : |
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 ?
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
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 !
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
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
Marsh Posté le 14-02-2002 à 16:16:05
toutafait
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