Lecture d'un fichier formaté - Shell/Batch - Programmation
Marsh Posté le 20-07-2007 à 14:53:11
Le problème ne vient pas du echo car si l'on fait echo " a", cela affiche bien les espaces devant (sur mon ordinateur).
Le problème ne vient pas du cut car si l'on fait echo " abc" |cut -c1-5, on a bien les espaces devant.
Le problème est donc en amont.
Je devine qu'il s'agit du piège classique
for ligne in `cat fichier1` |
La solution consiste a remplacer cette boucle for par
cat fichier1|while read ligne |
Marsh Posté le 20-07-2007 à 15:07:59
C'est pourtant ce que j'ai fait :
cat $line | while read LIN_IN
do
Dossier=`echo $LIN_IN | cut -c1-5`
done
Marsh Posté le 20-07-2007 à 16:59:02
ReplyMarsh Posté le 20-07-2007 à 21:43:28
Predator23 a écrit : Cela pose pb meme pour une variable en faisant |
echo "[$toto]"
=> [ trtze]
Predator23 a écrit : C'est pourtant ce que j'ai fait : |
Dossier=`echo "$LIN_IN" | cut -c1-5` !!!!!
Marsh Posté le 23-07-2007 à 17:06:36
Predator23 a écrit : C'est pourtant ce que j'ai fait : |
Ton problème vient en tout premier lieu de ta command read.
Celle-ci supprime les espaces (en fait les caractères de séparation spécifiés dans la variable IFS) en début et en fin de la ligne lue.
Il te faut donc modifier la valeur de IFS le temps de la lecture.
De plus, comme l'a indiqué Sve@r, il faut aussi encadrer la substitution de ta variable par des guillemets dans la commande echo,
Au final cela donne (en supprimant par la même occasion la commande cat) :
while IFS= read LIN_IN |
Jean-Pierre.
Marsh Posté le 27-07-2007 à 13:56:07
aigles a écrit : De plus, comme l'a indiqué Sve@r, il faut aussi encadrer la substitution de ta variable par des guillemets dans la commande echo |
En fait, les guillemets doubles permettent de demander au shell de ne pas faire d'interprétation sur le contenu.
Un exemple tout simple
liste=`ls -l`
echo $liste
echo "$liste"
Marsh Posté le 20-07-2007 à 12:18:30
Bonjour,
je suis devant une impasse, je m'explique, je chercher à convertir un fichier txt formaté d'une certaine manière et à le convertir dans une. Le seul problème que le fichier d'entrée commence par des espaces. et quand je veux récupérer les 5 premiers caractères, ma commande echo $ligne\cut -c1-5 me supprime les espaces en premier. Est-il possible de les garder ?
Merci de votre aide
Nico