Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/04/2007, 11h57   #1
Membre éprouvé
 
Avatar de argoet
 
Inscription : mai 2002
Messages : 535
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 535
Points : 461
Points : 461
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 :
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 :
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
argoet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 13h13   #2
Expert Confirmé
 
Avatar de Katyucha
 
Inscription : mars 2004
Messages : 3 109
Détails du profil
Informations personnelles :
Âge : 31
Localisation : Allemagne

Informations forums :
Inscription : mars 2004
Messages : 3 109
Points : 3 313
Points : 3 313
Pas trop de solutions autres
Peut etre le Perl qui serai plus rapide.
__________________
Ancien Rédacteur Linux && Unix / Nouveau retraité de DVP
The UNIX way of sex:
gunzip;strip;touch;finger;mount;fsck;more;yes;umount;sleep

Je ne réponds ni aux messages privées, ni aux messages plein de fautes...
Katyucha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2007, 22h46   #3
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
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 :
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
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2007, 11h49   #4
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 546
Points : 7 776
Points : 7 776
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.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h26.


 
 
 
 
Partenaires

Hébergement Web