Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell

Shell Vos questions sur l'utilisation des commandes shell

Réponse
 
Outils de la discussion
Vieux 30/07/2008, 16h54   #1 (permalink)
Responsable
Hardware
 
Avatar de buchs
 
Date d'inscription: août 2005
Localisation: Huttenheim
Âge: 21
Messages: 3 931
Envoyer un message via MSN à buchs Envoyer un message via Skype™ à buchs
Par défaut [ksh] Lecture d'un fichier unicode ligne par ligne

Bonjour,

je souhaite lire ce fichier ligne par ligne, seulement, ça foire

Code :
for line in `cat TMP`
> do
> echo "[${line}]" >>TMP2
> done
Contenu du fichier texte :
Citation:
# {060803} {奥妙全能白水清莲香洗衣皂 118g*4*20} #
# {07361140} {家乐瑶柱汁6*1kg} #
# {12370210} {家乐黑椒酸辣汤-新包装6*20*36g} #
# {07001116} {鸡汁08年第二波促销装6*1kg} #
# {12341120} {家乐香炸裹粉12*800g鲜蒜风味} #
# {07191110} {家乐浓缩火腿汁6*1kg} #
# {07191130} {家乐牛肉汁6*1kg} #
# {12290210} {家乐鱼片蔬菜汤-新包装6*20*32g} #
# {12361120} {家乐香炸裹粉12*800g鲜辣风味} #
# {11520500} {家乐香辣虾酱12*310g} #
# {07191120} {家乐浓缩蘑菇汁6*1kg} #
# {12300210} {家乐西湖牛肉羹-新包装6*20*37g} #
# {12170210} {家乐日式海鲜味噌汤4*15*31g} #
# {07361104} {瑶柱汁08年促销装6*1kg} #
# {07001115} {鸡汁08年2季度促销装6*1kg} #
# {12250210} {家乐鸡茸玉米羹-新包装6*20*38g} #
# {08170700} {家乐真味高汤6*830g} #
# {11500500} {家乐孜然辣酱12*310g} #
# {07001100} {家乐浓缩鸡汁G3 6*1kg} #
TMP2 :
Citation:
#
{060803}
{奥妙全能白水清莲香洗衣皂
118g*4*20}
#
#
{07361140}
{家乐瑶柱汁6*1kg}
#
#
{12370210}
{家乐黑椒酸辣汤-新包装6*20*36g}
#
#
{07001116}
{鸡汁08年第二波促销装6*1kg}
#
#
{12341120}
{家乐香炸裹粉12*800g鲜蒜风味}
#
#
{07191110}
{家乐浓缩火腿汁6*1kg}
#
#
{07191130}
{家乐牛肉汁6*1kg}
#
#
{12290210}
{家乐鱼片蔬菜汤-新包装6*20*32g}
#
#
{12361120}
{家乐香炸裹粉12*800g鲜辣风味}
#
#
{11520500}
{家乐香辣虾酱12*310g}
#
#
{07191120}
{家乐浓缩蘑菇汁6*1kg}
#
#
{12300210}
{家乐西湖牛肉羹-新包装6*20*37g}
#
#
{12170210}
{家乐日式海鲜味噌汤4*15*31g}
#
#
{07361104}
{瑶柱汁08年促销装6*1kg}
#
#
{07001115}
{鸡汁08年2季度促销装6*1kg}
#
#
{12250210}
{家乐鸡茸玉米羹-新包装6*20*38g}
#
#
{08170700}
{家乐真味高汤6*830g}
#
#
{11500500}
{家乐孜然辣酱12*310g}
#
#
{07001100}
{家乐浓缩鸡汁G3 6*1kg}
#
Y a des sauts de ligne involontaire, j'en déduis que je m'y prends mal, comment faire ça proprement en ksh?

__________________
~~~~~ Responsable Hardware. ~~~~~
Pour rejoindre l'équipe Hardware MP

Installation de Code::Blocks sous Debian à partir de Nightly Builds

C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère
buchs est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 30/07/2008, 17h07   #2 (permalink)
Membre éprouvé
 
Avatar de KindPlayer
 
Date d'inscription: février 2007
Messages: 451
Par défaut

ca serait pas à cause des idéogrammes?
__________________
La science est ce que nous comprenons suffisamment bien pour l'expliquer à un ordinateur. L'art, c'est tout ce que nous faisons d'autre.
Donald E. Knuth
KindPlayer est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/07/2008, 17h28   #3 (permalink)
Nouveau membre du Club
 
Date d'inscription: avril 2004
Âge: 29
Messages: 53
Par défaut

Les espaces dans le fichier provoque une nouvelle itération dans ton for.
En clair : supprime les espaces dans chaque lignes
(ou sers-toi des dièses pour le changement de ligne)
__________________
First, they ignore you. Then, they laught at you.Then, they fight you. Then, you win.

Mohandas Gandhi
dokho est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/07/2008, 18h01   #4 (permalink)
Responsable
Hardware
 
Avatar de buchs
 
Date d'inscription: août 2005
Localisation: Huttenheim
Âge: 21
Messages: 3 931
Envoyer un message via MSN à buchs Envoyer un message via Skype™ à buchs
Par défaut

Non les idéogrammes n'y sont pour rien et je ne veux absolument pas supprimer les espaces, je veux lire le fichier ligne par ligne avec l'alignement et les espaces qu'il contient.

Apparemment, je me suis fourvoyé, la manière que j'utilise ne lit pas ligne par ligne mais mot par mot

Des solutions?
__________________
~~~~~ Responsable Hardware. ~~~~~
Pour rejoindre l'équipe Hardware MP

Installation de Code::Blocks sous Debian à partir de Nightly Builds

C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère
buchs est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 30/07/2008, 18h44   #5 (permalink)
Nouveau membre du Club
 
Date d'inscription: avril 2004
Âge: 29
Messages: 53
Par défaut

Code :
cat TMP | while read line
do
echo $line >> TMP2
done
__________________
First, they ignore you. Then, they laught at you.Then, they fight you. Then, you win.

Mohandas Gandhi
dokho est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/07/2008, 18h55   #6 (permalink)
Responsable
Hardware
 
Avatar de buchs
 
Date d'inscription: août 2005
Localisation: Huttenheim
Âge: 21
Messages: 3 931
Envoyer un message via MSN à buchs Envoyer un message via Skype™ à buchs
Par défaut



En fouinant j'ai trouvé une technique similaire :

Code :
{ while read line
do
echo ${line}
done } < TMP


Comment se fait-il que while lit bien une ligne et for que les mots? Es-ce un comportement voulu?

__________________
~~~~~ Responsable Hardware. ~~~~~
Pour rejoindre l'équipe Hardware MP

Installation de Code::Blocks sous Debian à partir de Nightly Builds

C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère
buchs est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 30/07/2008, 20h46   #7 (permalink)
Membre chevronné
 
Date d'inscription: juin 2008
Messages: 643
Par défaut

Citation:
Comment se fait-il que while lit bien une ligne et for que les mots? Es-ce un comportement voulu?
readline mets la ligne lu dans la variable "line"
si tu fais
Code :
line="a b c"
for zot in $line; do echo $zot; done
tu vas séparer les mots a, b, c
pour traiter line comme un seul mot, il faudrait remettre des "" autour du style
Code :
for zot in "$line"; do echo $zot; done
- W
PS: je ne sais pas faire avec `cat xyz`
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Linux > Applications > Shell



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide