Forum Programmation.shell Problème récupération variable :-/

Posté par  .
Étiquettes : aucune
0
23
mai
2007
Bonjour à tous !

Je vais tenter d'expliquer clairement mon problème,
Déjà je suis sur une mandriva.
J'ai réussi à récupérer un nombre compris entre 0 et 99 je n'avais pas prévu le cas ou ce dernier serait supérieur ou égale à 100.

Voici le type de réponse que je récupére rep.txt :

dazdzad4484481484ef4ef4 5
cczecezcec15151544d4e4 45
czecececec5114844vvzec4ec1c4e4c 89
4e84e8c7ze4c7ez4c74df74fze4f 122
5114414741174174114 75


Voici la partie du script concerné :

do
#On traite les données
port[$i]=${ligne: -2}
i=`expr $i + 1`
done < rep.txt


Comme vous pouvez le constater je récupérer juste les deux derniers caractères ce qui est insufisant, et je ne peus me permettre dans récupérer trois vue qu'aprés je compare ces derniers.
Je pensai donc remplacer l'espace par deux espace avec la fonction sed, je ne l'ai jamais utiliser et j'avous avoir beaucoup de mal ...
donc voici le script que je pensai mettre en place :

sed -e `s/ / /g` -i rep.txt
i=1
do
#On traite les données
port[$i]=${ligne: -3}
i=`expr $i + 1`
done < rep.txt


Et la c'est le drame je suis obligé de retirer le -e commande inconnu, ensuite j'ai un"sed: impossible de lire -: Aucun fichier ou répertoire de ce type"

Je dois mal interpréter le sed .... si quelqu'un peut m'aider ce serait vraiment sympa ;)

Il y a peut être même certainement une autre solution auquel cas je suis à l'écoute.

Merci d'avance. Un noob qui veut progresser :p
  • # Quotes

    Posté par  . Évalué à 2.

    Je pense que ton sed souffre d'un problèmes de quotes. Tu as mis les `` (sous le 7 dans un azery) qui demande à bash d'executer la commande entre quote. Sed s'utilise avec les simple ' (touche 4) ou les doubles "
    • [^] # Re: Quotes

      Posté par  . Évalué à 1.

      oups :-/
      mdrr
      En faite mon sed fonctionne niquel :), merci ;) quel idiot je fais.
      Je vais tester voire ce que ca donne.


      i=1
      do
      #On traite les données
      port[$i]=${ligne: -2}
      if port[$i]==[00-99]; then
      port[$i]=${ligne: -3}
      i=`expr $i + 1`
      done < rep.txt


      Hum je sais pas si vous voyez le résonnement que je cherche à avoir si par exemple j'ai 2 chiffres présent dans port[$i]=${ligne: -2} alors je peus prendre les trois derniers caractères de la lignes ... si quelqu'un voit une solutions avec cette façon ;)
      je ne tente même pas ce que j'ai écris ci dessus sachant que c'est totalement faux :p et je ne vois pas trop le moyen de vérifier la présence de 2 chiffres, ou d'exclure la présence d'un espace.

      Merci ;)
  • # awk

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

    Une fois de plus, je constate que quand il s'agit de récupérer un champ d'une ligne de texte, on oublie awk.
    [13:09] atihon@armida:~$ cat fichier
    dazdzad4484481484ef4ef4 5
    cczecezcec15151544d4e4 45
    czecececec5114844vvzec4ec1c4e4c 89
    4e84e8c7ze4c7ez4c74df74fze4f 122
    5114414741174174114 75
    
    [13:09] atihon@armida:~$ awk '{print $NF}' fichier
    5
    45
    89
    122
    75
    
    La variable awk "$NF" correspond au dernier champ, il me semble que c'est exactement ce que tu recherches.
    • [^] # Re: awk

      Posté par  . Évalué à 1.

      Trés intérressant j'avais aperçus cette fonction mais je ne pensai pas qu'elle correspondait à mes besoin alors qu'en faite c'était tout à fait ca.

      Merci ;) Un acquis de plus.
    • [^] # Re: awk

      Posté par  . Évalué à 1.

      Trés intérressant j'avais aperçus cette fonction mais je ne pensai pas qu'elle correspondait à mes besoin alors qu'en faite c'était tout à fait ca.

      Merci ;) Un acquis de plus.
    • [^] # Re: awk

      Posté par  . Évalué à 2.

      Si il n'y a qu'un seul caractère espace à chaque ligne et ce juste avant le nombre que tu cherches à récupérer (en plus clair, comme dans ton exemple), tu peux utiliser la commande cut

      cut -d' ' -f2 fichier


      Pour info, j'ai dupliqué tes lignes jusqu'à en faire un fichier de 120Mo, et la commande awk prend en moyenne 6.8s à comparer à la commande cut, qui boucle tout en 1.5s

      • [^] # Re: awk

        Posté par  . Évalué à 1.

        Ok, niquel mais j'aimerai un peu analyser ce cut -d c'est le délimiteur qui est ici l'espace ' ' , ok je viens de comprendre f1 est du début au 1er espace et f2 la fin. Niquel
        merci ;)
        Surtout que ce n'est pas un petit fichier.

Suivre le flux des commentaires

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