Commande while avec résultat insastifaisant

Résolu
Ka-El Messages postés 279 Statut Membre -  
Ka-El Messages postés 279 Statut Membre -
Bonjour,
Je souhaite retravailler chaque ligne d'un fichier texte "toto.txt" avec la commande while. mais au bout d'un certain nombre de ligne j'obtiens un résultat faussé.
Voici le contenu du fichier que j'utilise:
-rw-rw-r-- 1 toto groupe 8000 Jan 27 03:34 /rep/tmp/X6574886
-rw-rw-r-- 1 toto groupe 8000 Jan 28 03:32 /rep/tmp/X6590919.tmp1
-rw-rw-r-- 1 toto groupe 8000 Jan 29 03:32 /rep/tmp/X6595523
-rw-rw-r-- 1 toto groupe 8000 Jan 31 03:32 /rep/tmp/X6616153
-rw-rw-r-- 1 toto groupe 8000 Feb 1 03:33 /rep/tmp/X6633919
-rw-rw-r-- 1 toto groupe 40000 Feb 1 04:18 /rep/tmpXF6634439
-rw-rw-r-- 1 toto groupe 8000 Feb 2 03:32 /rep/tmp/FX652664
-rw-rw-r-- 1 toto groupe 8000 Feb 3 03:32 /rep/tmp/FX670904
-rw-rw-r-- 1 toto groupe 19966 Feb 3 17:47 /rep/tmp/X6681867
-rw-rw-r-- 1 toto groupe 8000 Feb 4 03:32 /rep/tmp/FX688134
-rw-rw-r-- 1 toto groupe 8000 Feb 5 03:32 /rep/tmp/FX692885

Mon but est de variabiliser les numéros de fin de ligne en supprimant les éventuelles extensions (cas de la ligne X6590919.tmp1)
Voici pour l'instant, la commande que j'utilise:
while read line
do
A="${line#*X}"
B="${A%.*}"
echo "${A} ${B}"
done < toto.txt


Le résultat me donne ceci:
6574886 6574886
6590919 6590919
6595523 6595523
6616153 6616153
eb 1 03:33 /rep/tmp/X6633919 eb 1 03:33/rep/tmp/X6633919
eb 1 04:18 /rep/tmp/X6634439 eb 1 04:18 /rep/tmp/X6634439
eb 2 03:32 /rep/tmp/X6652664 eb 2 03:32 /rep/tmp/X6652664
eb 3 03:32 /rep/tmp/X6670904 eb 3 03:32 /rep/tmp/X6670904
eb 3 17:47 /rep/tmp/X6681867 eb 3 17:47 /rep/tmp/X6681867
eb 4 03:32 /rep/tmp/X6688134 eb 4 03:32 /rep/tmp/X6688134
eb 5 03:32 /rep/tmp/X6692885 eb 5 03:32 /rep/tmp/X6692885

Je ne comprends pas pourquoi seules les 4ères lignes sont correctes. Pourquoi j'obtiens un résultat faussé par la suite ? Est-ce lié au passage en février (Feb) ?
Avez-vous une idée ?
Merci d'avance pour votre aide.
Ka-El

2 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    À mon avis c'est ton fichier toto.txt qui est mal formaté (caractère non-imprimable/exotique dans certaines lignes), parce que chez moi tout marche bien :

    $ ./foo.sh 
    6574886 6574886
    6590919.tmp1 6590919
    6595523 6595523
    6616153 6616153
    6633919 6633919
    F6634439 F6634439
    652664 652664
    670904 670904
    6681867 6681867
    688134 688134
    692885 692885


    Que renvoie
    cat -A toto.txt
    ?
    0
    1. Ka-El Messages postés 279 Statut Membre
       
      Bonjour zipe31,
      Merci pour ta réponse.
      Malheureusement la commande ne donne pas de piste.
      Voici le résultat:
      -rw-rw-r-- 1 toto groupe 8000 Jan 27 03:34 /rep/tmp/X6574886$
      -rw-rw-r-- 1 toto groupe 8000 Jan 28 03:32 /rep/tmp/X6590919.tmp1$
      -rw-rw-r-- 1 toto groupe 8000 Jan 29 03:32 /rep/tmp/X6595523$
      -rw-rw-r-- 1 toto groupe 8000 Jan 31 03:32 /rep/tmp/X6616153$
      -rw-rw-r-- 1 toto groupe 8000 Feb 1 03:33 /rep/tmp/X6633919$
      -rw-rw-r-- 1 toto groupe 40000 Feb 1 04:18 /rep/tmp/X6634439$
      -rw-rw-r-- 1 toto groupe 8000 Feb 2 03:32 /rep/tmp/X6652664$
      -rw-rw-r-- 1 toto groupe 8000 Feb 3 03:32 /rep/tmp/X6670904$
      -rw-rw-r-- 1 toto groupe 19966 Feb 3 17:47 /rep/tmp/X6681867$
      -rw-rw-r-- 1 toto groupe 8000 Feb 4 03:32 /rep/tmp/X6688134$
      -rw-rw-r-- 1 toto groupe 8000 Feb 5 03:32 /rep/tmp/X6692885$
      -rw-rw-r-- 1 toto groupe 2238 Feb 2 17:17 /rep/tmp/X6663382$
      0
      1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > Ka-El Messages postés 279 Statut Membre
         
        C'est bizarre ;-\

        Je n'ai fait qu'un vulgaire copier/coller de ton fichier (1er post) et ça marche bien pour moi ;-\

        Essaie avec cette commande ci-dessous pour voir si le résultat est mieux ou apreil :

        $ sed 's/.*X\([^.]*\)\(.*\)/\1\2 \1/' toto.txt 
        6574886 6574886
        6590919.tmp1 6590919
        6595523 6595523
        6616153 6616153
        6633919 6633919
        F6634439 F6634439
        652664 652664
        670904 670904
        6681867 6681867
        688134 688134
        692885 692885
        0
      2. Ka-El Messages postés 279 Statut Membre > zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Désolé Zipe31, je t'ai enduis en erreur, en voulant rendre mes infos plus anonymes...
        Comme j'e l'indique ci-dessous, c'est le "F" de "Feb" qui me donne ce résultat...
        0
  2. Ka-El Messages postés 279 Statut Membre
     
    Ok je crois que j'ai identifié d'où vient le problème.
    En fait "dans la vrai vie" les fichiers commence par "F" :
    exemple : F6574886
    Du coup la variable A="${line#*F}" bloque sur le "F" de "Feb" ...

    Quelqu'un sait comment je peux contourner le "Feb" pour filtrer uniquement le numéro de fin de ligne ?
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      A="${line##*F}"
      ;-)
      0
      1. Ka-El Messages postés 279 Statut Membre > zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention  
         
        ça marche Nickel !
        Merci beaucoup zipe31 :-)
        Et désolé pour la confusion ! ;-)
        @+
        0