Forum Programmation.shell Tester un numero de fichier

Posté par  .
Étiquettes : aucune
0
3
mai
2006
Amis du shell bonjours !

J'ai une boucle sur une liste de fichier ayant un numero dans leurs nom
(mon_fichier_XXX)
J'aimerais tourne seulement sur une moitiee des fichiers et donc faire un test sur le numero (ici XXX )
voila ce que j'ai fait

#!/bin/sh
[..]
filenum= echo $fileTrig |awk -F '_' '{print $4}' | awk -F '.' '{printf $1}'
echo $filenum # me sort le bon numero
numb=$(($filenum)) # passe le numero dans une variable numerique
if [ "$numb" -le 250 ]; then
echo "OK" $numb
fi


Pour toute les valeurs de XXX il me sort
OK 0
le prog met donc $numb a 0 et si je passe directement par $filenum j'ai droit a des erreurs de integer/string

si quelqu'un a une idee c'est genial

Merci
  • # pourquoi ?

    Posté par  . Évalué à 1.

    Question bête, pourquoi fais tu :


    numb=$(($filenum))


    ta variable $filenum doit logiquement suffire, l'interpréteur devinera tout seul qu'il s'agit d'une variable numérique
    • [^] # Re: pourquoi ?

      Posté par  . Évalué à 1.

      Sans cette ligne j'ai le msg d'erreur
      [: : integer expression expected
      (avec if [ "$filenum" -le 250 ]; )

      Le passage par num est la seule solution que j'ai trouvee pour eviter cette erreur
  • # awk peut le faire tout seul ...

    Posté par  . Évalué à 3.

    #!/bin/sh
    [..]
    filenum= echo $fileTrig |awk -F '_' '{print $4}' | awk -F '.' '{printf $1}' # pourquoi awk | awk?

    echo $filenum # me sort le bon numero
    numb=$(($filenum)) # passe le numero dans une variable numerique
    if [ "$numb" -le 250 ]; then
    echo "OK" $numb
    fi


    A mon avis tu peux t'en sortir avec awk et la fonction split ou sub

    un truc comme ca:

    filenum= echo $fileTrig |awk -F '_' '{
    split ($4,out,".")
    if (out[2] <250) {
    print "OK " out[2]
    }
    }'


    Pas testé mais si tu me donne trois ou quatre exemples de fichiers ....
    • [^] # Re: awk peut le faire tout seul ...

      Posté par  . Évalué à 2.

      encore mieux:

      si tu obtiens ta liste de fichier à l'aide d'un for, tu n'es plus obligé de le faire:

      ls <options de selection> | awk -F '_' '{
      split ($4,out,".")
      if (out[2] <250) {
      print "OK " out[2]
      }
      }'
    • [^] # Re: awk peut le faire tout seul ...

      Posté par  . Évalué à 1.

      awk |awk simplement car ca je connais tres mal awk et donc que je compense en faisant les choses mal ...
      pour le split
      D'accord ca simplifie les choses merci au moins pour ca ...
      Par contre le test et le print dans le awk c'est pas vraiement ce que je veux faire
      pour l'instant mon print OK a juste pour but de verifier que ca marche ...
      avant d'envoyer d'autre commande par derriere...


      Quoi que je peux toujours en faire une uttilisation detournee
      • [^] # Re: awk peut le faire tout seul ...

        Posté par  . Évalué à 2.

        pour executer des commandes via awk tu as la fonction system par exemple.
        sinon comme tu dis il y a aussi l'utilisation détournée.
  • # sed, ton ami

    Posté par  . Évalué à 2.

    
    ls -1 mon_fichier_* | while read NOM_FIC
    do
    
    NUM_FIC=`echo $NOM_FIC | sed 's/[^0-9]//g'`
    
    if [ $NUM_FIC -le 250]
    then
    
    echo "OK, inférieur ou égal à 250"
    
    else
    
    echo "PB, supérieur ou égal à 250"
    
    fi
    
    done
    
    
  • # chaine vs entier

    Posté par  (site web personnel) . Évalué à 2.

    C'est en utilisant "" que tu force le shel a l'interpréter comme une chaine de caractère.
    [ $num -le 250 ] suffirait

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.