IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unix Discussion :

[unix] [Mac OS X] Problèmes de fichier texte pour traitement cut et grep


Sujet :

Unix

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut [unix] [Mac OS X] Problèmes de fichier texte pour traitement cut et grep
    Bonjour !

    C'est un truc que je pensait résoudre tout seul, mais sur lequel je sèche finalement...

    Voila :
    J'ai besoin de récupérer des données dans des fichiers issus d'exports d'application.
    Les séparateurs d'origine sont soit des ";", soit des tabulations.

    En fait, ça pose deux problèmes :

    1- Quand le séparateur est ";" je ne parvient pas à faire un cut, car il ne reconnaît pas le séparateur.
    J'ai essayé différentes syntaxes : cut -d ";" -f 1,2 mon_fichier.txt ou cut -d ';' -f 1,2 mon_fichier.txt
    => le résultat est :
    ^;
    ;
    cut: mon_fichier.txt: Illegal byte sequence

    J'ai réussi à remplacer les ";" par un autre séparateur (avec sed -e 's/;/:/g' mon_fichier.txt > mon_fichierTest, voilà au moins une commande qui fonctionne !)

    Mais lorsque je refais un cut :
    cut -d : -f 2,3,5 mon_fichierTest
    => le résultat est :
    ^::
    ::
    cut: mon_fichier.txt: Illegal byte sequence

    Alors que la même commande marche très bien sur le fichier /etc/passwd !

    Qu'est-ce qui peut rendre mon fichier si réticent au cut ? Et comment corriger cela ?

    2- Quel que soit le séparateur, certain des fichier .txt sur lesquels je travaille sont considérés comme n'ayant qu'une seule ligne (même si cette ligne contient des milliers d'enregistrements).
    Un coup de vi sur ces fichiers m'a permis, semble-t-il, d'identifier le problème, mais pas la solution.
    En effet, au lieu d'un retour chariot, chaque ligne finit par "^M".
    Une solution serait de remplacer ces "^M" par un retour chariot, mais je ne sais pas le faire en script.
    De plus, un cat sur le même fichier ne fait apparaître "^M", mais un simple "a".
    Je précise que je n'ai pas la possibilité de paramétrer l'export en question (il s'agit principalement de l'export des contacts issus du client mail Entourage sous Mac OS X).

    Une ENORME reconnaissance à qui m'aidera à sortir de ce mauvais pas !!!
    En attendant de pouvoir, un jour prochain, aider à mon tour...

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Au lieu de cut, tu peux essayer d'utiliser awk, qui accepte plusieurs separateurs. Si tu nous expliques ce que tu cherches a extraire en fonction des ; et des tab, nous pourrons te mettre sur la voie du awk.

    Pour ton probleme de ^M, tu peux utiliser sed pour le remplacer. Pour taper ce caractere, il faut utiliser la sequence "ctrl v" puis "ctrl+entree". Ensuite, a toi de voir par quoi tu veux remplacer ce caractere.

  3. #3
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 842
    Points
    7 842
    Par défaut
    Citation Envoyé par escribure Voir le message
    Qu'est-ce qui peut rendre mon fichier si réticent au cut ? Et comment corriger cela ?
    "Illegal byte sequence" indique que ton fichier de données contient des caractères encodés différement de ce qu'attend ton OS. Il faudrait commencer par régler ça avant de faire des cut. Ca n'a rien à voir avec les séparateurs ";" ou autres. Je soupçonne que tes fichiers sont encodés en ISO-8859-1 mais lus comme des UTF-8. Cherche si tu as la commande iconv sous MacOS X, elle permet de transcoder les fichiers.
    2- Quel que soit le séparateur, certain des fichier .txt sur lesquels je travaille sont considérés comme n'ayant qu'une seule ligne (même si cette ligne contient des milliers d'enregistrements).
    MacOS utilise CR comme fin de ligne alors que tes utilitaires Unix utilisent LF. Windows utilise CR-LF pour mettre tout le monde d'accord
    Pour corriger ce problème, cette commande devrait suffire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tr '\r' '\n' < fichier_ko > fichier_ok

Discussions similaires

  1. Problème Import fichier texte
    Par Fantomas13 dans le forum VBA Access
    Réponses: 3
    Dernier message: 17/01/2008, 00h08
  2. [VB.NET]Problème lecture fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/05/2006, 17h05
  3. Problème Génération fichier texte
    Par veenie dans le forum Oracle
    Réponses: 5
    Dernier message: 18/05/2006, 12h21
  4. problème ouverture fichier texte
    Par ice-t69 dans le forum Langage
    Réponses: 4
    Dernier message: 07/11/2005, 20h29
  5. Problème avec fichier texte
    Par jpdelx dans le forum ASP
    Réponses: 7
    Dernier message: 13/11/2003, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo