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 :

Lecture croisée de fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur STC, systèmes de supervision
    Inscrit en
    Juin 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur STC, systèmes de supervision
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 58
    Par défaut Lecture croisée de fichiers
    Salut à tous!

    Je cherche à créer un fichier .sh qui effectue une petite recherche croisée... Voici mon exemple :

    Fichier1.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Nom1
    Nom2
    Nom3
    Nom4
    ...
    Nomi
    Fichier2.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Prenom1	Tel1	Addresse1	Nom1	Commentaire1
    Prenom2	Tel2	Addresse2	Nom2	Commentaire2
    Prenom3	Tel3	Addresse3	Nom3	Commentaire3
    Prenom4	Tel4	Addresse4	Nom4	Commentaire4
    ...
    Prenomi	Teli	Addressei	Nomi	Commentairei
    Je souhaiterais dans un premier temps, balayer le Fichier1.txt, récupérer le contenu de chaque ligne et ensuite rechercher dans Fichier2.txt ce même contenu pour ensuite me mettre en variable, le prénom associé puis bidouiller --> bidouiller = prochaine étape ;-)

    Voici mon fichier .sh actuel (appelé new.sh) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/bin/bash
     
    for ligne in $(cat fichier1.txt)
    do
    	set $(echo $ligne)
    	mon_nom=$(eval echo $1)
    	#echo "variable1=$mon_nom"
    	mon_prenom =$(grep $nom_cp fichier2.txt | awk '{Print$1}')  #mon_prenom = 1er argument de la ligne contenant mon_nom
    	echo "$mon_nom : $mon_prenom"
    done
    seulement, il me sort une insulte pour chacune des lignes (new.sh = fichier shell appelé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_prenom: new.sh 10: not found
    Quelqu'un aurait une petite solution? je commence à être à court d'idée...

    Un grand merci!

  2. #2
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Bonjour,

    mon_prenom=

    Supprimer l'espace avant le =

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Décembre 2012
    Messages : 43
    Par défaut
    le même code ne serait il pas possible avec la fonction 'join' ?

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    +1 pour join.

    S'il faut juste un filtre, grep -f fichier1.txt fichier2.txt et c'est fini

    Sinon, vu le problème posé, je ferais tout dans awk avec un genre de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '(NR==FNR)x[$1]++ (NR!=FNR){if (x[$4]>0) print $1}' fichier1.txt fichier2.txt
    (pas testé)
    les bidouilles sont alors possibles.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    le Fichier1.txt ne contenant qu'une seule colonne, nom="$ligne", donc en fait, for nom in $(cat Fichier1.txt) (sachant que ça ne fonctionne que parce que le fichier ne contient qu'une seule colonne; en général pour parcourir un fichier en shell on utilise une boucle while)

    grep | awk est redondant : awk sait ne traiter que les lignes qui correspondent à une regex.

    j'aime bien savoir à quoi va servir les codes (la «bidouille» ^^) car ça peut modifier un peu le code qui précède.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,

    Je suis d'accord, grep | awk , c'est un peu redondant, pour un cas aussi simple de récupération du prenom, le grep de gnu est suffisant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture d'un fichier .dbf
    Par San Soussy dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 07/07/2004, 16h30
  2. Réponses: 6
    Dernier message: 02/09/2003, 15h12
  3. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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