[Shell] Sélection de la n-ième chaine

Résolu/Fermé
Trezeg Messages postés 73 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 novembre 2010 - 3 mai 2007 à 14:19
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 - 3 mai 2007 à 15:52
Bonjour,

J'aimerais savoir comment récupérer un élément de la n-ième occurrence d'une chaine de caractère. Je m'explique :
dans un de mes shells, je lance la commande suivante
inputFile=`grep bcp $currv/batchMngt/batches/$1 | awk '{print $4}'`
Mon but est de pouvoir réutiliser cette ligne pour la seconde ligne contenant bcp, puis la troisième, etc...

Merci pour votre aide.

Trez
A voir également:

5 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 mai 2007 à 14:33
Salut,

J'ai du mal à comprendre ce que tu veux exactement !

D'abord tu parles de "récupérer un élément de la n-ième occurrence d'une chaine de caractère", puis ensuite d'après ce que je comprend, tu veux récupérer chaque ligne (enfin chaque champ $4) dans une variable...

Peux-tu m'éclairer ? Merci.
0
Trezeg Messages postés 73 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 novembre 2010 2
3 mai 2007 à 14:49
Salut,

En fait tout part d'une procédure stockée crée en Sybase et qui appelle mon shell.
Ce dernier prend en paramètre un nom de fichier pour lequel il va réaliser un traitement.
$ myShell.ksh myFile.txt
Ce shell recherche dans le fichier, le 4eme champ de la (ou des) ligne contenant le mot bcp.
J'aimerais pouvoir modifier mon shell de facon a lui ajouter un paramètre de rang qui me permettra de continuer à récupérer le 4eme champ du second paramètre
$ myShell.ksh myFile.txt 3
Doit me donner le 4eme champs de la 3eme ligne contenant bcp.

Voilou

Merci
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 mai 2007 à 14:59
En reprenant ta syntaxe :
inputFile=`grep bcp $currv/batchMngt/batches/$1 | awk '{print $4}' | sed -n ''$2'p'`
Peut être qu'une solution existe avec awk (ce qui serait plus simple), mais là je ne l'ai pas...

Edit : J'ai trouvé :
inputFile=`grep bcp $currv/batchMngt/batches/$1 | awk 'NR=='$2'{print $4}'`

--
Z'@+...che.<code>JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
3 mai 2007 à 15:16
grep | awk, quel gachis de resources :-))

inputFile=` awk 'NR=='$2' && /bcp/ {print $4}' $currv/batchMngt/batches/$1`
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 mai 2007 à 15:19
Ben si on peut plus ce faire plaisir aussi ;-)))

Bien joué ;-)
0
Trezeg Messages postés 73 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 novembre 2010 2
3 mai 2007 à 15:33
Merci dubcek mais...
$ awk 'NR=='$2' && /bcp/ {print $4}' test.txt
awk: syntax error near line 1
awk: bailing out near line 1
$
Ou encore
$ set InputFile=`awk 'NR=='$2' && /bcp/ {print $4}' test.txt`
awk: syntax error near line 1
awk: bailing out near line 1
$
J'ai également essayé avec nawk .
$ nawk 'NR=='$2' && /bcp/ {print $4}' test.txt
nawk: syntax error at source line 1
 context is
        NR== >>>  && <<<
nawk: bailing out at source line 1
$


:-\\
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > Trezeg Messages postés 73 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 novembre 2010
3 mai 2007 à 15:38
Même réponse qu'en #7 faut définir le paramètre $2 !!!

;-))
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
3 mai 2007 à 15:52
J'ai trop vu de cat | grep | grep | awk .. j'en souffre encore :-)(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Trezeg Messages postés 73 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 novembre 2010 2
3 mai 2007 à 15:22
Re- Jipicy
$ cat test.txt
bcp secondChamp troisiemeChamp quatriemeChamp
bcp secondChamp troisiemeChamp quatriemeChamp2
bcp secondChamp troisiemeChamp quatriemeChamp3
$
$ grep bcp test.txt | awk '{print $4}'
quatriemeChamp
quatriemeChamp2
quatriemeChamp3
$
$ grep bcp test.txt | awk '{print $4}' | sed -n ''$2'p'
quatriemeChamp
quatriemeChamp2
quatriemeChamp3


Ca ne filtre pas :-///
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
3 mai 2007 à 15:27
Ben c'est normal, le paramètre "$2" n'est pas défini ;-))
jp@MDK:~/tmpfs ssh$ set 1 2
jp@MDK:~/tmpfs ssh$ grep bcp bar.txt | awk '{print $4}' | sed -n ''$2'p'
quatriemeChamp2
jp@MDK:~/tmpfs ssh$ grep bcp bar.txt | awk '{print $4}' | sed -n ''$1'p'
quatriemeChamp
jp@MDK:~/tmpfs ssh$
;-)
0
Trezeg Messages postés 73 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 novembre 2010 2 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
3 mai 2007 à 15:39
Wahh,
j'suis une vraie buse...
Merci jipicy ;-)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > Trezeg Messages postés 73 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 novembre 2010
3 mai 2007 à 15:43
Change de pseudo alors ;-DDD

;-)
0