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 :

[HP-UX] 3 Fichiers en 1 trié par N° Ligne


Sujet :

Unix

  1. #1
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut [HP-UX] 3 Fichiers en 1 trié par N° Ligne
    Bonjour à vous
    Je suis sur un syteme HP-UX et j'ai besoin de réaliser "En Shell Script" le besoin suivant

    J'ai 3 fichiers avec le meme nombre de lignes/enregitrements
    Citation Envoyé par fichier1
    enreg 1
    enreg 2
    enreg 3
    enreg 4
    Citation Envoyé par fichier 2
    infos 1
    infos 2
    infos 3
    infos 4
    Citation Envoyé par Fichier 3
    info cmpl 1
    info cmpl 2
    info cmpl 3
    info cmpl 4
    Y a t'il un moyen simple à partir de ces 3 fichiers de générer la fusion suivante dans le fichier resultat suivant (trier par ordre de présence dans chaque fichier)

    Citation Envoyé par fichier resultat
    enreg 1 de fichier 1
    infos 1 de fichier 2
    info cmpl 1 de fichier 3
    enreg 2 de fichier 1
    infos 2 de fichier 2
    info cmpl 2 de fichier 3
    enreg 3 de fichier 1
    infos 3 de fichier 2
    info cmpl 3 de fichier 3
    enreg 3 de fichier 1
    infos 3 de fichier 2
    info cmpl 3 de fichier 3

    J'ai bien la solution suivante , mais elle me parait trop gourmande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Pour N = n° de ligne de fichier 1              
                    Prend la Nème Ligne de fichier 1 >> Fichier resultat 
                    Prend la Nème Ligne de fichier 2 >> Fichier resultat 
                    Prend la Nème Ligne de fichier 3 >> Fichier resultat
    Ce qui donne ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /bin/rm -f Resultat
    for no_lig in `grep -n [0-z] Fic1 | cut -d ":" -f1`
    do
         echo $no_lig
         head -$no_lig Fic1 | tail -1 >> Resultat
         head -$no_lig Fic2 | tail -1 >> Resultat 
         head -$no_lig Fic3 | tail -1 >> Resultat 
    done
    ça fonctionne mais c'est pas top de retraiter tous les fichiers à chaque fois
    Auriez vous une autre soluce ? (toujours en shell)

    Merci de votre aide
    Cordialement
    @argoët
    Signé : Capitaine Jean-Luc Picard

  2. #2
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Points : 5 075
    Points
    5 075
    Par défaut
    Pas trop de solutions autres
    Peut etre le Perl qui serai plus rapide.
    Grave urgent !!!

  3. #3
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Citation Envoyé par argoet
    Bonjour à vous
    .../...
    ça fonctionne mais c'est pas top de retraiter tous les fichiers à chaque fois
    Auriez vous une autre soluce ? (toujours en shell)

    Merci de votre aide
    Cordialement
    @argoët

    Ça doit faire l'affaire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /bin/rm -f Resultat
     
    typeset -i tot_lig=`wc -l < Fic1.txt`
    typeset -i no_lig=0
     
    while [[ $no_lig -lt $tot_lig ]] 
    do
         ((no_lig=$no_lig+1))
         echo $no_lig
         sed -n "${no_lig}p" Fic1.txt >> Resultat
         sed -n "${no_lig}p" Fic2.txt >> Resultat
         sed -n "${no_lig}p" Fic3.txt >> Resultat
    done

    $ less Resultat
    enreg 1
    infos 1
    info cmpl 1
    enreg 2
    infos 2
    info cmpl 2
    enreg 3
    infos 3
    info cmpl 3
    enreg 4
    infos 4
    info cmpl 4
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  4. #4
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    il serait preferable (si le contenu reel des fichiers le permet)
    de concatener les 3 fichiers de la facon suivante

    "sort" sur chaque fichier puis un "join" afin d'eviter toute boucle de concatenation tres lourde
    puis d'ouvrir le fichier avec un sed ou awk ou un perl et d'en trier le contenu

    mais le contenu reel des fichiers doit pouvoir etre lui meme trie pour rendre cette solution viable (par numero contenu dans la ligne ou par mots clefs)

    sinon la solution proposee au dessus avec les 3 sed est la plus simple.

Discussions similaires

  1. tri par nom de fichier et boucle
    Par mederik dans le forum Shell et commandes POSIX
    Réponses: 7
    Dernier message: 19/12/2011, 11h36
  2. tri par ordre alphabétique des noms de fichier contenu dans un dossier
    Par ulnar dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 07/04/2011, 16h20
  3. Insertion dans un fichier trié par ordre croissant
    Par darkterreur dans le forum Langage
    Réponses: 14
    Dernier message: 20/09/2009, 19h39
  4. Réponses: 5
    Dernier message: 18/04/2007, 11h22
  5. Tri d'un fichier EXCEL en VB par ACCESS
    Par Tsuna78 dans le forum VBA Access
    Réponses: 11
    Dernier message: 08/03/2007, 14h20

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