Rechercher : dans
Par :

[Script shell] Incrémenter un entier

Dernière réponse le 23 aoû 2007 à 10:55:32 0seb0, le 21 aoû 2007 à 15:19:29 
 Signaler ce message aux modérateurs

Bonjour,
Ca doit être couillon, mais je galère...

Voici ce que je veux faire :
- savoir combien de fois un fichier contient la chaine "Enlève ta culotte, bébé : j'arrive !" (NdlR : le lecteur avisé relèvera l'effort d'originalité...)
- et juste pour mentir ou parce que je trouve ça plus funky, rajouter "un" à ce nombre.

Pour l'instant, j'ai ça :

grep "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool | wc -l | cat | read NbIteChaine
NbIteChaine=$(expr $NbIteChaine + 1)


Mais...
echo $NbIteChaine
ne veut rien savoir et me renvoie
$(expr 3 + 1)
quand la chaine apparait 3 fois dans le fichier par exemple. Alors que moi, naïf et dépressif, j'attends le résultat "4".

J'ai beau essayer d'inombrables combinaisons de positions des $, Bébé me résiste aujourd'hui ! :p
Configuration: Windows 2000
Internet Explorer 6.0

1

dubcek, le 21 aoû 2007 à 15:32:32

Pourquoi ne pas utiliser l'option -c de grep :
-c Suppress normal output; instead print a count of matching lines
for each input file

Répondre à dubcek

2

0seb0, le 21 aoû 2007 à 15:40:23

...mais parce que je ne connaissais pas cette option bien sûr !

Donc j'ai maintenant :

grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool | cat | read NbIteChaine

à la place de la première ligne, mais à vrai dire... ça ne change rien à mon souci, en fait. :o

Merci en tous cas !

Répondre à 0seb0

3

dubcek, le 21 aoû 2007 à 16:00:49

Pour sauver le résultat:
NbIteChaine=$(grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool)

Répondre à dubcek

4

0seb0, le 21 aoû 2007 à 16:15:37

Hum...

Alors là, un echo $NbIteChaine juste après me renvoie (au lieu de "3") :

$(grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool)

Ou alors j'ai raté un épisode. oO'

Répondre à 0seb0

5

0seb0, le 22 aoû 2007 à 11:54:11

Ca ne serait pas une question d'espaces dans la ligne suivante ?

NbIteChaine=$(expr $NbIteChaine + 1)

Répondre à 0seb0

6

0seb0, le 22 aoû 2007 à 12:06:55
  • +2

Enfin ! C'était un problème de syntaxe sur l'utilisation de "expr". La réponse et donc :

grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool | cat | read NbIteChaine
NbIteChaine=`expr $NbIteChaine + 1`

Problème résolu. :-)

Répondre à 0seb0

7

jipicy, le 22 aoû 2007 à 12:33:34

Salut,

Et est-ce qu'un :

NbIteChaine=$(expr $(grep -c grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool) + 1)
ne serait pas plus simple ?

;-)) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

8

lami20j, le 22 aoû 2007 à 13:42:26

Salut,

pour Enlève la culotte, oui il faut une solution plus simple :-DDD et aussi rapide :-DDD lami20j

Répondre à lami20j

9

jipicy, le 22 aoû 2007 à 13:44:40

;-))
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

10

0seb0, le 23 aoû 2007 à 09:10:25

Le coup du $(grep -c trucmuche) ne semblait pas marcher, cf. message <4>. J'avoue que je ne sais pas pourquoi. :-/

@lami20j: tssss... :p

Répondre à 0seb0

11

jipicy, le 23 aoû 2007 à 09:13:03

Alors là, un echo $NbIteChaine juste après me renvoie (au lieu de "3") :
Te renvoie quoi ? ;-\
Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

12

0seb0, le 23 aoû 2007 à 09:18:09

Ca :

$(grep -c "Enlève ta culotte, bébé : j'arrive !" ./MonFichierTropCool)

oO'

Répondre à 0seb0

13

jipicy, le 23 aoû 2007 à 09:26:59

Enlève le point d'exclamation de ton expression :

$(grep -c "Enlève ta culotte, bébé : j'arrive " ./MonFichierTropCool) 
Ça devrait passer ;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

14

0seb0, le 23 aoû 2007 à 09:42:23

Toujours pas :(
Mais j'avais raté un détail...
Il faut enlever les guillemets de mon message <12>. Ca va peut-être vous mettre la puce à l'oreille, parce que moi, ça ne m'inspire pas plus !

Répondre à 0seb0

15

jipicy, le 23 aoû 2007 à 09:49:07

Essaie en le protégeant alors :

grep -c "Enlève ta culotte, bébé : j'arrive \!"
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

16

0seb0, le 23 aoû 2007 à 10:06:19

Pour régler la question du "!", je l'ai viré et... ça ne change rien.
Monde cruel...

Répondre à 0seb0

17

_vince, le 23 aoû 2007 à 10:51:36

Je fais un peu de proselytisme pour awk:

awk '
BEGIN {sum = 1;}
/"Enlève ta culotte, bébé : j'arrive !"/ { sum += 1; }
END { print "nombre de lignes: " sum; }'
MonFichierTropCool

Pour les operations mathematiques en ksh, je trouve que les double parentheses sont + pratiques:
toto = 5
(( toto = toto + 1 ))
print "toto = ${toto}"
est plus pratique que expr mais c'est affaire de gout...

Répondre à _vince

18

 lami20j, le 23 aoû 2007 à 10:55:32

Salut,

peut être ce sont les accents
essaie

echo $(grep -c "Enl.ve ta culotte, b.b. : j'arrive" ./MonFichierTropCool) 

lami20j

Répondre à lami20j
Collection CommentÇaMarche.net