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 :

Tri de fichier avec zones en binaire


Sujet :

Unix

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Tri de fichier avec zones en binaire
    Bonjour,
    je souhaiterais trier un fichier de longueur fixe (300car) mais qui contient quelques zones en binaire. Tout s'est à peut pres bien passé avec la commande 'sort -o Fresultat -k1.5,1.16 Fatrier' jusqu'au moment ou une des zones en binaire contient la valeur '0A' et rien ne va plus, je retrouve des lignes supplémentaires dans mon fichier Fresultat.
    Comment remédier à ça???

    Merci à tous.

  2. #2
    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 882
    Points
    7 882
    Par défaut
    0x0A = new-line
    Ca me parait normal.
    ɹǝsn *sıɹɐlos*

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    En fait le contenu des zones en binaire est du style '00 0A 22 2E', la finde rec normale se trouve quelques car plus loin.
    Je trouve dans mon fichier Fresultat beaucoup plus de lignes que dans mon fichier à trier.

    Comment puis-je proceder pour que ce 1er 0A ne soit pas pris comme une fin de record?

  4. #4
    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 882
    Points
    7 882
    Par défaut
    Tu ne peux pas, sort est conçu pour trier des fichiers texte, pas binaires.

    Tu peux bien sur recoller les lignes coupées une fois le sort terminé.
    ɹǝsn *sıɹɐlos*

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Ca a au moins le mérite d'être clair, même si j'aurais préferé autre chose...
    Je dois donc me tourner vers l'achat d'un autre sort qui lui saurait faire ça ...
    Merci quand même.

  6. #6
    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 882
    Points
    7 882
    Par défaut
    C'est relativement facile à coder.

    Recoller les lignes pourrait etre fait par un script aussi assez simple, vu que tu travailles avec une longueur de ligne constante.
    ɹǝsn *sıɹɐlos*

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Hello,
    Hum, peut-etre pas si simple... Recoller les lignes une fois triées, mais quels morceaux vont avec quoi??
    Remplacer les '0A' mal placés par autre chose , trier puis remettre les '0A' pourrait également être une solution mais j'ai un peu peur de m'engager dans une usine à gaz...

  8. #8
    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 882
    Points
    7 882
    Par défaut
    Il faudrait que tu affiches une ligne contenant un 0A. J'ai du mal a comprendre pourquoi elle n'est pas déjà coupée.

    Utilise "od -c" pour afficher les caractères de controle.

    Quel OS utilises-tu ?
    ɹǝsn *sıɹɐlos*

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    HP-UX
    Voici la 1 ere ligne du fichier:

    od -xc Fatrier
    0000000 3030 3030 3737 3033 3030 3431 3736 2020
    0 0 0 0 7 7 0 3 0 0 4 1 7 6
    0000020 3030 3535 3030 3239 3339 4735 2020 2020
    0 0 5 5 0 0 2 9 3 9 G 5
    0000040 2020 2020 3530 2020 2020 2020 2020 3230
    5 0 2 0
    0000060 3730 4330 3520 2020 3030 3030 3030 3030
    7 0 C 0 5 0 0 0 0 0 0 0 0
    0000100 3134 3038 3933 3438 3831 3030 3032 4244
    1 4 0 8 9 3 4 8 8 1 0 0 0 2 B D
    0000120 4320 3030 3032 3030 3030 3030 3030 3030
    C 0 0 0 2 0 0 0 0 0 0 0 0 0 0
    0000140 3030 2020 2030 3230 3038 3033 3332 3030
    0 0 0 2 0 0 8 0 3 3 2 0 0
    0000160 2020 2020 2020 2020 3031 2020 2020 2020
    0 1
    0000200 2020 2020 2030 3030 3030 3020 2020 2020
    0 0 0 0 0 0
    0000220 2030 3030 3030 3020 3030 2020 2020 2020
    0 0 0 0 0 0 0 0
    0000240 2020 2020 2020 2020 2020 2020 2020 2020

    0000260 3032 3030 3031 3733 3030 2020 3000 0000
    0 2 0 0 0 1 7 3 0 0 0 \0 \0 \0
    0000300 0000 0000 0000 0000 0000 0030 3030 3030
    \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0 0 0 0 0
    0000320 3030 3030 3030 3030 3030 3030 3030 3030
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    *
    0000360 3030 3030 3030 3030 2020 3130 2020 2020
    0 0 0 0 0 0 0 0 1 0
    0000400 2020 2020 2020 2031 3120 2020 2020 2030
    1 1 0
    0000420 3036 3031 3230 3038 3033 3239 0000 516f
    0 6 0 1 2 0 0 8 0 3 2 9 \0 \0 Q o
    0000440 6120 3700 0000 0a22 2e0a 3030 3030 3737
    a 7 \0 \0 \0 \n " . \n

  10. #10
    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 882
    Points
    7 882
    Par défaut
    C'est illisible, je t'ai demandé "od -c", pas "od -xc" et met la sortie entre des tags code pour qu'il n'y ait pas de retour à la ligne.
    ɹǝsn *sıɹɐlos*

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Oooops, ai-je précisé que j'étais novice dans l'univers unix?

    "et met la sortie entre des tags code pour qu'il n'y ait pas de retour à la ligne"
    'od -c ' ok, mais le reste est un peu nebuleux pour moi.
    Le plus simple, je mets en piece jointe le fichier en question.
    Merci de ta patience.
    Fichiers attachés Fichiers attachés
    • Type de fichier : tar F.tar (10,0 Ko, 40 affichages)

  12. #12
    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 882
    Points
    7 882
    Par défaut
    Les "code tags" (balise code en français) n'ont rien à voir avec Unix. C'est un formattage du texte des messages que permettent la plupart des forums en ligne comme developpez.com.

    Contrairement à ce que tu a écrit dans ton premier message, ton fichier ne contient pas de lignes supplémentaires après le tri.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ wc -l Fatrier
          14 Fatrier
    $ sort -o Fresultat -k1.5,1.16 Fatrier
    $ wc -l Fatrier                       
          14 Fatrier
    ɹǝsn *sıɹɐlos*

  13. #13
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Oui, tu as parfaitement raison et c'est là tout mon problème:
    Le fichier issu d'un traitement 'cobol microfocus' est composé de 7 enregistrements et non pas 14...
    ...
    0000440 6120 3700 0000 0a22 2e0a 3030 3030 3737
    a 7 \0 \0 \0 \n " . \n

    le 1er '0a' en bleu fait partie d'une zone numérique : en hexa "00 00 0A 22 2E"
    le 2ème en rouge est bien la fin de record...

    Apres avoir passé ce fichier dans le sort unix, je retouve en debut de fichier 'trié' les :
    2221 0a22 230a 222e 0a22 300a 226c 0a22
    " ! \n " # \n " . \n " 0 \n " l \n "

    completement séparés du contexte:

    A+

  14. #14
    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 882
    Points
    7 882
    Par défaut
    La notion de fichier à longueur d'enregistrements fixe n'existe pas sous Unix. Le mieux est d'écrire un petit programme en C ou autre langage de ton choix pour effectuer ce tri. Ton fichier est inadapté aux commandes de tri Unix.
    ɹǝsn *sıɹɐlos*

  15. #15
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Hum, C'est la conclusion à laquelle j'en étais arrivé.
    Merci tout de même d'avoir essayé.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/03/2011, 13h38
  2. fusion fichier avec un 'ou binaire'
    Par xduris dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 25/10/2010, 12h41
  3. Réponses: 5
    Dernier message: 28/11/2007, 11h33
  4. Réponses: 2
    Dernier message: 24/01/2007, 17h38
  5. Tri de fichier avec le "sort"
    Par LFC dans le forum Langage
    Réponses: 1
    Dernier message: 08/03/2006, 07h55

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