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

Linux Discussion :

(SHELL) recherche d'un nom en fonction de champs contenu sur plusieurs lignes


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 28
    Points
    28
    Par défaut (SHELL) recherche d'un nom en fonction de champs contenu sur plusieurs lignes
    Bonjour,

    Je travaille dans les bases de données et j'essaye de réaliser un script shell permettant d'étudier les fichiers logs de chargement des données.

    j'ai des lignes ressemblant à les suivantes :

    INSERT INTO TOTO

    ou
    INSERT INTO
    TOTO

    ou
    INSERT
    INTO
    TOTO

    Je souhaite dans tous les cas récupérer TOTO lorsque juste avant j'ai eu les mots INSERT INTO à la suite mais possibilité d'espace entre INSERT et INTO (1 ou plusieurs)

    Pour l'instant j'ai géré le cas où tous les mots sont sur la même ligne à l'aide de grep...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -i INSERT fichier| tr ";" " " | grep -vi "-" | grep -vi "\*" | grep -vi "\/\*"| grep -vi "#" | grep -i into | awk '{print $3}' | sort | uniq
    Mais je ne pense pas réussir à le faire quand c'est sur plusieurs lignes?
    Quelqu'un connait la programmation Awk? est ce pratique pour ce genre de cas?

    Merci d'avance


  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Avec Perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -0 -ne 'print $1 if m/INSERT\s+INTO\s+(\S+)/i' myfile.log
    --
    Jedaï

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Merci mais avec cette commande je récupère juste un nom de table.
    Mais si dans mon fichier j'ai plusieurs
    delete fron TOTO
    delete
    from
    titi
    delete from
    tata


    comment récupéerer TOTO titi et tata dans un fichier?
    Merci d'avance


    Je suis déja sur la voie

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -0 -ne 'print $1 if m/INSERT\s+INTO\s+(\S+)/gi' myfile.log
    --
    Jedaï

  5. #5
    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 262
    Points
    12 262
    Par défaut
    Citation Envoyé par ksper45 Voir le message
    Bonjour,

    Je travaille dans les bases de données et j'essaye de réaliser un script shell permettant d'étudier les fichiers logs de chargement des données.

    j'ai des lignes ressemblant à les suivantes :

    INSERT INTO TOTO

    ou
    INSERT INTO
    TOTO

    ou
    INSERT
    INTO
    TOTO

    Je souhaite dans tous les cas récupérer TOTO lorsque juste avant j'ai eu les mots INSERT INTO à la suite mais possibilité d'espace entre INSERT et INTO (1 ou plusieurs)

    Pour l'instant j'ai géré le cas où tous les mots sont sur la même ligne à l'aide de grep...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -i INSERT fichier| tr ";" " " | grep -vi "-" | grep -vi "\*" | grep -vi "\/\*"| grep -vi "#" | grep -i into | awk '{print $3}' | sort | uniq
    Mais je ne pense pas réussir à le faire quand c'est sur plusieurs lignes?
    Quelqu'un connait la programmation Awk? est ce pratique pour ce genre de cas?

    Merci d'avance

    un seul grep suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...........-grep -ive "patern" -e "paternt" ....... -e "last patern" | awk ......

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Merci pour votre aide mais Jedai ça ne marche toujours pas.

    SI j'ai

    INSERT INTO TOTO
    Insert
    Into
    TATA
    INSERT
    into TITI


    Il affiche TOTO TOTO TOTO

    avez vous une idée..... pour le Perl? merci d'avance

  7. #7
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -0 -ne 'print for m/INSERT\s+INTO\s+(\S+)/gi' fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -0 -ne 'while (m/INSERT\s+INTO\s+(\S+)/gi) { print "$1\n" }' fichier

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Merci, cela devient trés bien mais il reste encore un problème.

    Pour INSERT INTO la commande marche trés bien mais je dois réaliser la même chose pour Delete from et la il se pose un autre problème

    SI j'ai

    Delete
    From TOTO
    Select From titi


    Il m'affiche TOTO et titi. avec la dernière commande donnée par LDMB.

    Pourquoi?
    et comment éviter ce problème?

    Merci d'avance
    et merci pour tout

  9. #9
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Ca m'étonnerait beaucoup qu'il t'affiche TOTO ou TITI avec la dernière commande de LLB, a priori c'est plutôt avec une version modifiée de cette commande, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -0 -ne 'while (m/delete\s+from\s+(\S+)/gi) { print "$1\n" }' fichier
    ou, si tu veux les deux en même temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -0 -ne 'while (m/(?:insert\s+into|delete\s+from)\s+(\S+)/gi) { print "$1\n" }' fichier
    --
    Jedaï

  10. #10
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 51
    Points : 28
    Points
    28
    Par défaut
    Merci beaucoup cela marche trés bien vous etes des

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

Discussions similaires

  1. commande sql sur plusieurs lignes dans un shell
    Par oguevel dans le forum DB2
    Réponses: 2
    Dernier message: 14/01/2010, 08h48
  2. Kdevelop/Ctags - prototype de fonction sur plusieurs lignes ?
    Par TyeFromEzella dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 28/09/2009, 18h06
  3. [RegEx] Recherche sur plusieurs lignes
    Par Sorgue dans le forum Langage
    Réponses: 5
    Dernier message: 23/11/2008, 09h58
  4. Fonction de calcul sur plusieurs lignes
    Par babsy dans le forum SQL
    Réponses: 1
    Dernier message: 13/11/2007, 11h34
  5. [Shell] Traiter un resultat sur plusieurs lignes
    Par djspank dans le forum Linux
    Réponses: 2
    Dernier message: 07/11/2007, 17h51

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