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 POSIX Discussion :

Comparer des codes de fichiers Commande Shell


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 42
    Par défaut Comparer des codes de fichiers Commande Shell
    J'ai deux fichiers, Dans le fichier 1, j'ai des lignes et dans le fichier 2 j'ai des codes.
    Mon programme doit recuperer le code de chaque ligne c'est à dire les trois premier caractéres de chaque ligne du fichier 1.
    Si ce code est retrouvé dans le fichier 2, je copie toute la ligne dans un troisiéme fichier.

    Exemple:


    Fichier 1
    REJZDDT/00001144201211191708201211211700AB
    GIMZDDT/00014085201211161442
    LUEBART/00002132




    Fichier 2

    BBB ZDD
    GIM ZDD
    GIM TTT
    LUE BBB



    Fichier 3
    GIMZDDT/00014085201211161442
    LUEBART/00002132


    J'ai essayé avec les commande shell grep et comm mais sans succés. Normalement c'est possible avec la commande awk.
    Merci d'avance

  2. #2
    Expert confirmé 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 : 48
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ cd /tmp
    $ vi toto
    $ vi tutu
    $ while read                           
    > do                                   
    > var=$(echo $REPLY | awk '{print $1}')
    > grep -i "$var" toto >> titi          
    > done < tutu                          
    $ cat titi
    GIMZDDT/00014085201211161442
    GIMZDDT/00014085201211161442
    LUEBART/00002132 
    $ rm t?t?
    $
    la ligne GIM est en double puisque qu'il y a deux * GIM comme grep
    donc c'est normal.

    si tu as d'autres spécificité à trier je te laisse chercher maintenant que tu sais comment faire pour lire ton fichier de références

  3. #3
    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
    Par défaut
    Il y a un peu plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read var foo                           
    do                                   
        grep "^$var" fichier1          
    done < fichier2 > fichier3

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 662
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    awk '{if(NR==FNR){getline <"fichier2"; a[$1]++}else{if(substr($0,1,3) in a){print $0}}}' fichier2 fichier1
    GIMZDDT/00014085201211161442
    LUEBART/00002132
    Tutoriel awk
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Même avec un simple grep :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [idriss@hp-dv6:~]$ cat t1.txt 
    REJZDDT/00001144201211191708201211211700AB
    GIMZDDT/00014085201211161442
    LUEBART/00002132 
    [idriss@hp-dv6:~]$ cat t2.txt
    BBB ZDD
    GIM ZDD
    GIM TTT
    LUE BBB
    [idriss@hp-dv6:~]$ grep "^$(cut -d " " -f1 t2.txt | sort | uniq)" t1.txt > t3.txt
    [idriss@hp-dv6:~]$ cat t3.txt 
    GIMZDDT/00014085201211161442
    LUEBART/00002132 
    [idriss@hp-dv6:~]$
    Cordialement,
    Idriss

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Citation Envoyé par ok.Idriss Voir le message
    Même avec un simple grep :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [idriss@hp-dv6:~]$ grep "^$(cut -d " " -f1 t2.txt | sort | uniq)" t1.txt > t3.txt
    Simplifions encore plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ head f*
    ==> f1 <==
    REJZDDT/00001144201211191708201211211700AB
    GIMZDDT/00014085201211161442
    LUEBART/00002132
     
    ==> f2 <==
    BBB ZDD
    GIM ZDD
    GIM TTT
    LUE BBB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ fgrep -f <(grep -o '^[^ ]*' f2) f1 
    GIMZDDT/00014085201211161442
    LUEBART/00002132
     
    $

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/06/2012, 11h54
  2. Passer des arguments avec la commande "Shell"
    Par bbor99 dans le forum VB.NET
    Réponses: 1
    Dernier message: 25/11/2011, 23h18
  3. [SHELL] ajouter des paramètres pour une commande shell
    Par anissben dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 11/12/2010, 13h36
  4. Comparer des noms de fichiers équivalents en C
    Par yolenoyer dans le forum Linux
    Réponses: 3
    Dernier message: 31/10/2010, 21h13
  5. Réponses: 15
    Dernier message: 18/06/2009, 15h10

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