Commande while avec résultat insastifaisant

Résolu/Fermé
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 - Modifié par Ka-El le 6/02/2017 à 12:43
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 - 6 févr. 2017 à 16:11
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
A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
6 févr. 2017 à 13:33
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
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
6 févr. 2017 à 14:15
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
6 févr. 2017 à 15:02
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
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
6 févr. 2017 à 15:11
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
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
6 févr. 2017 à 15:09
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
6 févr. 2017 à 15:17
A="${line##*F}"
;-)
0
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 > zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
6 févr. 2017 à 16:11
ça marche Nickel !
Merci beaucoup zipe31 :-)
Et désolé pour la confusion ! ;-)
@+
0