Sujet : UNIX/Bash sed

Bijour,

D'habitude quand je veux downloader des donnees dans excel, j'utilise une fonction genre

{
   scp  data.txt
   sed s/$(echo -e "\001")/","/g data.txt > data_cleaned.csv
   rm data.txt

}

Le probleme arrive quand j'ai des caracteres speciaux (genre thailandais ou chinois).

Pour le moment je recupere le data.txt, sauvegarde en UTF-16 (ou 8) et importe dans excel. Sauf que c'est chiant.
Il y a moyen de rajouter une option genre charset=UTF-16 dans sed ? Si oui, comment ?

Merci.

2

Re : UNIX/Bash sed

Installe FreeBSD.

Le véritable asile, un site de pères de familles qui mangent du fenouil.

3

Re : UNIX/Bash sed

http://linux.die.net/man/1/iconv en étape intermédiaire ?

4

Re : UNIX/Bash sed

Yes je vais essayer. Merci.
Et maintenant pour une raison que j'ignore Hive refuse de faire tourner mes queries.....

5

Re : UNIX/Bash sed

Bon et bien avec

function get_hdfs_bis {
   scp blabla@blabla/* raw_data.txt
   iconv -f UTF-8 -t UTF-16 raw_data.txt > raw_data2.txt
   sed s/$(echo -e "\001")/","/g raw_data2.txt > raw_data_cleaned2.csv

   rm raw_data.txt
   }

Je me tape une erreur
sed: RE error: illegal byte sequence

6

Re : UNIX/Bash sed

Et ils sont ou rain et plume quand on a besoin d'eux ?!

En plus c'est super interessant (hum)

7

Re : UNIX/Bash sed

Lapin,

Que donne:

echo $LANG

su-per

8

Re : UNIX/Bash sed

http://www.politique.net/img/jack-lang-ministre.jpg

Le véritable asile, un site de pères de familles qui mangent du fenouil.

9

Re : UNIX/Bash sed

Plume a écrit:

Lapin,

Que donne:

echo $LANG

en_GB.UTF-8

10

Re : UNIX/Bash sed

Okay, c'est la locale que va utiliser sed. Tu remarqueras qu'il s'attend à avoir une entrée en utf8.
Donc quand tu lui files de utf16 il est vénère.


Et je ne suis même pas certain qu'il gère bien l'utf8, c'est à dire que quand tu lui dis de remplacer \001, peut être que dans ton implémentation de sed il va bosser byte par byte au lieu de considérer caractère par caractère (qui peuvent parfois s'exprimer sur plusieurs bytes en utf8 dès qu'il s'agit de caractères accentués par exemple).

Et ainsi remplacer un byte qui a en effet la valeur \001 mais qui ne correspond pas au caractère début de chapitre. En réalité ce byte pourrait composer un autre caractère compliqué qui est représenté par plusieurs bytes.


Bref, travaille toujours en utf8, puis après (re)converti vers utf16 ou garde en utf8 selon ce que tu attends.
Si ça merde, oublie sed et regarde du côté de perl genre:

perl -pe 's/\001/,/g'
su-per

11

Re : UNIX/Bash sed

Merci mon bon dauphin.

J'obtiens le meme resultat en passant par perl ou en placant LANG=en_GB.UTF-16.
Maintenant c'est Excel qui me les casse. Dans la preview je vois que la .csv est correcte et propre, mais quand je l'ouvre ca met 1 minute, et c'est plein de caracteres speciaux sur 5 lignes.
Google time.

12 Dernière modification par Conrad (14-11-2013 12:44:54)

Re : UNIX/Bash sed

Ah Excel et le csv, toute une histoire.

Exemple : http://stackoverflow.com/questions/6002 … omatically

Le véritable asile, un site de pères de familles qui mangent du fenouil.

13

Re : UNIX/Bash sed

Je lisais justement ce lien. Bordel.
Bon et bien je crois que je vais rester au coup du je l'export en .txt en utf-16 et je re-importe dans excel ensuite.

Merci

14

Re : UNIX/Bash sed

Viky a écrit:

Merci mon bon dauphin.

J'obtiens le meme resultat en passant par perl ou en placant LANG=en_GB.UTF-16.
Maintenant c'est Excel qui me les casse. Dans la preview je vois que la .csv est correcte et propre, mais quand je l'ouvre ca met 1 minute, et c'est plein de caracteres speciaux sur 5 lignes.
Google time.

Mais en travaillant en utf8 ça donne quoi ?

function get_hdfs_bis {
   scp blabla@blabla/* raw_data.txt

   perl -pe "s/\N{U+001}/,/g" raw_data.txt | iconv -t UTF-16 > data.csv

   rm raw_data.txt
}
su-per

15

Re : UNIX/Bash sed

Merci, mais ca donne ca:

http://www.lesitedecuisine.fr/upload/90/0/tqCL5buKxU.png

Je crois que c'est excel qui n'aime pas les .csv

16

Re : UNIX/Bash sed

Quelle merdasse excel: http://blog.plataformatec.com.br/2009/0 … rails-app/


function get_hdfs_bis {
   scp blabla@blabla/* raw_data.txt

   # UTF-16LE Bom
   printf "\xff\xfe" > data.csv

   # Converted to UTF-16LE data
   perl -pe "s/\N{U+001}/\t/g" raw_data.txt | iconv -t UTF-16LE >> data.csv

   rm raw_data.txt
}
su-per

17

Re : UNIX/Bash sed

Il y a des gens qui utilisent Presto ici ?