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

Shell et commandes GNU Discussion :

fusion fichier avec un 'ou binaire'


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut fusion fichier avec un 'ou binaire'
    Bonjour,

    J'ai un fichier de départ qui peut se représenter binairement par exemple comme suit :
    "010101010101010101010101010101010101010101"

    Quand je le télécharge, je perds des paquets. Mon fichier à donc des trous de '0000000000'.
    Fichier après premier téléchargement :
    "000000000001010101010101010101010101010101"
    Fichier après un autre téléchargement :
    "010101010101010101010101010101000000000000"
    J'ai donc sur le premier fichier perdu des données au début et sur le deuxième, j'ai perdu des données à la fin.
    J'aimerai faire un 'ou binaire' entre mes deux fichiers corompus pour récupérer mon fichier de départ.
    Je me tourne vers un script car je ne peux pas installer sur mon linux le logiciel 'merge' qui aurait pu mettre très utile. Je tourne en rond avec la commande 'diff'.

    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Essai avec ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #!/usr/bin/ksh
    FILE_A=$1
    FILE_B=$2
     
    set -A tbl_A
    set -A tbl_B
    for i in $(cat $FILE_A | sed -e 's/./& /'g) ; do
        tbl_A[${#tbl_A[*]}]=$i
    done
    for i in $(cat $FILE_B | sed -e 's/./& /'g) ; do
        tbl_B[${#tbl_B[*]}]=$i
    done
     
    typeset -i t=0
    while [[ t=$(( t + 1 )) -le ${#tbl_A[*]} ]] ; do
        if [[ -n  ${tbl_A[$(( $t - 1 ))]} ]] && [[ -n  ${tbl_B[$(( $t - 1 ))]} ]] ; then
    	[[ $(( ${tbl_A[$(( $t - 1 ))]} + ${tbl_B[$(( $t - 1 ))]} )) -gt 0 ]] && printf "1" || printf "0"
        fi
    done
    echo
    Y'a surement deux ou trois reglages restants à faire, mais chez moi ca fonctionne.

    Lilian.

  3. #3
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    peu-être penser s'attaquer à la source?

    En effet, rien ne te garantie que la fusion des deux fichier donnera le bon résultat. A moins que tu ne transfert aussi un checksum ou quelque chose d'équivalent (qui rendra la probabilité d'erreur négligeable).

    Qu'utilises-tu pour le transfert?

    Peut-être faut-il changer les options de transfert pour obtenir directement le bon fichier.
    Exemple avec ftp jouer entre le mode binaire et ascii.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lilian_h
    Y'a surement deux ou trois reglages restants à faire[...]
    je confirme :
    Code ksh93 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/ksh
     
    tbl_A=( $(sed 's/./& /g' $1) )
    tbl_B=( $(sed 's/./& /g' $2) )
     
    for (( t=0; t<${#tbl_A[@]}; t++ ))
    do if [ -n ${tbl_A[t]} -a -n ${tbl_B[t]} ]
       then (( ${tbl_A[t]} + ${tbl_B[t]}?(out=1):(out=0) ))
            printf $out
       fi
    done
    echo
    ça fonctionne pareil en bash.

    Sinon, je suis de l'avis de Jabbounet.
    Dernière modification par Invité ; 14/10/2010 à 08h49.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    N_BaH,

    Je ne maitrise pas suffisamment Bash pour en proposer des solutions.

    et tu as conserver le
    #!/usr/bin/ksh
    Et je ne pensais pas à ce genre de réglages; qui n'en sont pas d'ailleurs, tu proposes seulement d'utiliser Bash ; mais plutôt à transformer son binaire avec od, et vice-versa.

    Je suis aussi de l'avis de Jabbounet. Quelle type de connexion utilises tu pour avoir autant de trous ?

    Lilian.

  6. #6
    Invité
    Invité(e)
    Par défaut
    non, non, c'est bien le shebang que j'ai utilisé pour tester le script, et qui appelle ksh93; j'aurais dû préciser que cela pourrait ne pas fonctionner avec tous les ksh...

  7. #7
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Gloops, désolé,

    Et effectivement ca ne fonctionne pas chez moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    syntax error at line 3 : `(' unexpected
    Merci pour l'info
    Lilian.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Merci pour vos réponses!

    J'ai testé le script de lilian_h avec en entrée file1 et file2 décrit ci dessous
    file1
    0000000101010101
    file2
    0101010101000000
    Le résultat est bien
    0101010101010101

    Par contre si en entrée j'ai
    file1
    0000000202020202
    file2
    0202020202000000
    alors en sortie j'ai
    0101010101010101
    alors que j'attends
    0202020202020202

    J'ai testé le script de N_BaH qui ne fonctionne pas chez moi non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    syntax error at line 8 : `then' unexpected
    Je suis aussi de l'avis de jabbounet mais malheureusement je dois admettre que j'ai des paquets qui se perdent en chemin. Pb udp avec une appli qui fonctionne pas bien.

    J'ai testé od et j'ai essayé de l'intégrer dans le script de lilian_h mais je n'arrive pas à faire mieux que de l'hexa avec od. En plus je ne comprends pas tout ce que od renvoie. J'ai l'impression qu'il sort des données avec le numéro de colonne.

    Je n'arrive pas à mon résultat pour le moment.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Bonjour,

    Il faut nous expliquer pourquoi dans ton binaire tu pourrais avoir des '2' ?

    C'est assez étonnant, il me semblais que le binaire était composé des chiffres 1 et 0...

    Pour od, effectivement il ne génère pas de binaire, mais de l'hexa ou de l'octal.
    Après il y a des solutions intermédiaires:



    Lilian.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Merci lilian_h pour ta réponse,

    Le fichier que j'ai pris pour exemple ('020202020202') est un fichier d'un format quelconque genre .txt.

    Donc il faut que je rajoute plusieurs étapes pour arriver à mes fins.

    1) D'abord il faut que je transforme mes fichiers d'entrés (genre .txt) en binaire ('001001110011000011').
    a) Pour cela il faut que je les passe d'abord sous 'od' qui me les transformera en héxa
    b) Puis que j'écrive un script pour les passer de l'hexa au binaire avec SED

    2) Ensuite j'utilise ton script qui à l'air de marcher parfaitement.

    3) Enfin je fais l'opération inverse de la numéro 1
    a) Je transforme mon binaire recomposé en héxa. Quel outil je peux utiliser pour cela ?
    b) Enfin je passe mon héxa dans le format d'origine. Pareil, est-ce qu'il y a un outil pour cela?

    J'ai l'impression que c'est bien compliqué. L'étape 3 me paraît surtout la plus compliquée.
    Vous pensez pas qu'il est possible de faire un 'ou binaire' plus simplement.

    Merci d'avance pour votre aide.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    xduris,

    Citation Envoyé par xduris
    1) D'abord il faut que je transforme mes fichiers d'entrés (genre .txt) en binaire ('001001110011000011').
    a) Pour cela il faut que je les passe d'abord sous 'od' qui me les transformera en héxa
    b) Puis que j'écrive un script pour les passer de l'hexa au binaire avec SED

    2) Ensuite j'utilise ton script qui à l'air de marcher parfaitement.
    Pour tout ca, oui.

    Pour l'étape 3, ca se reflechit, je n'ai pas en tête d'outils faisant l'operation inverse d'OD. Ca doit surement exister.
    La 3.a n'est pas compliquée, un petit script, et c'est bon, pour la b, il faut voir.. j'y reflechit
    D'ici là quelqu'un aura surement répondu

    Lilian.

  12. #12
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Re,

    Vois avec xxd.

    Lilian.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Je suis parti sur un programme C qui fonctionne.

    Je vous donne le lien du sujet que j'ai ouvert sur le forum 'langage C'.

    http://www.developpez.net/forums/d98...usion-fichier/

    Merci à vous tous!

  14. #14
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Je pense que c'est une bonne solution.
    Lilian.

Discussions similaires

  1. lecture binaire d'un fichier avec header incorporé
    Par gmanouvrier dans le forum Débuter
    Réponses: 4
    Dernier message: 15/11/2013, 18h05
  2. Réponses: 13
    Dernier message: 05/12/2011, 14h09
  3. Tri de fichier avec zones en binaire
    Par Papybrus dans le forum Unix
    Réponses: 14
    Dernier message: 06/01/2009, 06h16
  4. Réponses: 2
    Dernier message: 24/01/2007, 17h38
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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