Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/03/2008, 17h53   #1
Membre du Club
 
Inscription : mars 2006
Messages : 158
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 158
Points : 48
Points : 48
Par défaut awk et recode : UTF8 -> ISO8859-1 possible ?

Salut,

au sein d'un script shell, il y a une partie awk qui traite toutes les lignes d'un fichier texte ISO8859-1: il les mémorise et les reporte à un endroit précis d'un autre fichier texte qui contient déjà des caractères spéciaux (notament le à)

le pb qui se pose est le suivant : si ces lignes contiennent des caractères spéciaux (é, è, ñ, etc), elles ne sont pas mémorisées, et donc ignorées par awk.
En creusant un peu j'ai découvert la commande recode avec laquelle je fais passer juyste avant le fichier qui sera traité par awk en UTF8, ce qui donne :

Code :
1
2
1.recode ISO8859-1..UTF8 préawk.txt
2.traitement par awk du fichier préawk.txt vers le fichier postawk.txt
Naturellement j'aimerais beaucoup ajouter une étape 3 dont il n'est pas utile d'en dire plus que ce qui suit :

Code :
3.recode UTF8..ISO8859-1 postawk.txt
Malheureusement ça ne marche pas...

Code :
1
2
recode UTF-8..ISO8859-1 postawk.txt
recode: postawk.txt failed: Entrée invalide in step `UTF-8..ISO-8859-1'
Ca m'arrangerait vachement de trouver une astuce qui permette de repasser le fichier en iso8859 (encodage par défaut de mon éditeur de txt), existe-t-elle selon vous ? ou alors quelque chose d'autre peut être...

Merci
eZula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 00h00   #2
Rédacteur
 
Avatar de Arnaud F.
 
Homme Arnaud Feltz
Développeur .NET
Inscription : août 2005
Messages : 5 204
Détails du profil
Informations personnelles :
Nom : Homme Arnaud Feltz
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Transports

Informations forums :
Inscription : août 2005
Messages : 5 204
Points : 6 113
Points : 6 113
Salut,

pour l'encodage des fichiers, il existe la commande iconv, elle permet de passer facilement un fichier d'un encodage à un autre, exemple :

Code :
iconv -f UTF-8 -t ISO8859-1 tonFichier.txt
-f pour from (de) et -t pour to (à).

Pour avoir la liste des encodages disponible, iconv -l mais le mieux restant bien évidemment de consulter la page du manuel correspondant

En espérant avoir répondu à ta question,
++
__________________
C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

Installation de Code::Blocks sous Debian à partir de Nightly Builds
Arnaud F. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 19h34   #3
Membre du Club
 
Inscription : mars 2006
Messages : 158
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 158
Points : 48
Points : 48
Salut et merci pour cette réponse,

j'ai essayé diverses combinaisons et même en mêlant iconv et recode mais ça ne fonctionne pas comme attendu. Soit la variable n'est pas retenue, soit elle est reportée avec les caractères spéciaux déformés. On dirait que c'est surtout le codage UTF8 -> ISO8859-1 qui pose pb, et de fait :

Code :
1
2
iconv -f UTF-8 -t ISO8859-1 postawk.txt
iconv: Séquence d'échappement illégale à la position 55
avec recode c'est pareil

Code :
1
2
recode UTF8..ISO8859-1 postawk.txt
recode: fichier.txt failed: Entrée invalide in step `UTF-8..ISO-8859-1'
Pour être un peu plus précis, le fichier pré-awk.txt, en ISO-8859-1, contient des centaines de lignes de ce type :

Code :
1
2
if exist "%AppData%\addon.dat" (
if exist "%ProgramFiles%\El niño\El niño.exe" (
juste avant le script awk, j'encode le fichier en UTF-8, soit avec recode, soit avec iconv... Le role du script awk (qui m'a été donné ici d'ailleurs), est pour chaque ligne du fichier préawk.txt, de mémoriser l'expression entre "" (càd le chemin d'un fichier/dossier), et de la reporter juste en dessous de cette ligne pour au final donner le fichier final postawk.txt

Code :
1
2
3
4
if exist "%AppData%\coucou.dat" (
echo procedure:le %date% a %time% "%AppData%\coucou.dat" >> "%Chemin.txt%"
if exist "%ProgramFiles%\El niño\El niño.exe" (
echo procedure:le %date% a %time% "" >> "%Chemin.txt%"
comme vous le voyez dans la dernière ligne "%ProgramFiles%\El niño\El niño.exe" n'a pas été reporté. Ca c'était avec iconv. Avec recode ça donne ceci :

Code :
1
2
if exist "%ProgramFiles%\El niiño\El niño.exe" (
echoprocedure:le %date% a %time% "%ProgramFiles%\El niño\El niño.exe" >> "%Chemint.txt%"
Est-ce que vous connaissez d'autres astuces ?
eZula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2008, 12h31   #4
Membre expérimenté
 
Avatar de iblis
 
Inscription : janvier 2007
Messages : 510
Détails du profil
Informations personnelles :
Âge : 45

Informations forums :
Inscription : janvier 2007
Messages : 510
Points : 510
Points : 510
Envoyer un message via Yahoo à iblis
Une petite pincée de Perl ?

Code :
1
2
3
perl -MEncode -lne 'print encode("utf8", decode("ISO-8859-1", $_))' pre.txt > post.txt
# process post.txt
perl -MEncode -lne 'print encode("ISO-8859-1", decode("utf8", $_))' post.txt
iblis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2008, 21h56   #5
Membre du Club
 
Inscription : mars 2006
Messages : 158
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 158
Points : 48
Points : 48
Merci iblis pour cette réponse, mais ça n'a pas l'air de marcher, la variable contenant des caractères spéciaux n'est pas transmise

eZula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 13h40   #6
Membre expérimenté
 
Avatar de iblis
 
Inscription : janvier 2007
Messages : 510
Détails du profil
Informations personnelles :
Âge : 45

Informations forums :
Inscription : janvier 2007
Messages : 510
Points : 510
Points : 510
Envoyer un message via Yahoo à iblis
Quelle variable, je n'ai pas compris, tu n'avais pas parlé d'un fichier ?
iblis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 22h00   #7
Membre du Club
 
Inscription : mars 2006
Messages : 158
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 158
Points : 48
Points : 48
"Variable" n'estpeut être pas le mot adapté, en fait je faisais référence à ces chemins de fichiers

Code :
1
2
if exist "%AppData%\addon.dat" (
if exist "%ProgramFiles%\El niño\El niño.exe" (
"%AppData%\addon.dat" est bien pris en charge dans le script awk, mais "%ProgramFiles%\El niño\El niño.exe" ne l'est pas compte tenu du caractère spécial ñ

Donc j'ai utilisé tes suggestions perl qui n'ont pas changé la situation concernant ces caractères spéciaux.

Je précise tout de suite que j'ai trouvé - sur ce forum d'ailleurs - une solution alternative qui fonctionne bien, et très récemment. Ceci dit la solution à ce problème chiant peut être intéressante, si ça se trouve quelqu'un d'autre pourrait rencontrer le même souci
eZula est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h36.


 
 
 
 
Partenaires

Hébergement Web