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 :

[bash] grep sur une partie d'un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut [bash] grep sur une partie d'un fichier
    Bonjour à tous,

    Je fais rarement du bash et il s'avère que je suis bloqué.

    Je vous explique :
    1. Je recherche une chaîne dans un fichier File1 et je récupère la ligne où cette chaîne se trouve. (ligne 12 du script)
    2. Je recherche la première fois qu'une seconde chaîne apparaît à partir de la ligne du 1. (ligne 15 du script)

    Actuellement, j'ai ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/bash
     
    GroupDuplicated=Doublon.txt
    ConfigurationFile=Conf.txt
    #CPT=0
    #echo CPT=${CPT}
    for ligne in `cat ${GroupDuplicated}`
    do
            #CPT=`expr ${CPT} + 1`
            echo "GROUPE=$ligne"
            sleep 2
            StartLine=`grep -nE "object-group network $ligne" $ConfigurationFile | awk -F ":" '{print $1;}'`
            echo $StartLine
            Content=cat $ConfigurationFile | awk "NR>$StartLine"
            EndLine=`grep -nE "object-group" $Content | awk -F ":" '{print $1;}'`
            sleep 2
            echo $EndLine
    done
    #echo ${CPT}
    L'affectation de la variable EndLine ne retourne aucun résultat (ligne 15)

    Avez-vous des pistes ?

    Merci

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

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

    réponse rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Content=$(cat $ConfigurationFile | awk "NR>$StartLine")
    réponse détaillée :
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    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,

    Voici quelques exemples qui peuvent t'aider (ici, je recherche les 2 premières lignes où l'on trouve le mot "File") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ grep -n "File" xx.tx 
    11: File 12180
    17: File 12340
    23: File 12500
    29: File 12660
    $ grep -m 2 -n "File" xx.tx 
    11: File 12180
    17: File 12340
    $ read -d "" start end < <(grep  -m 2 -n 'File' xx.tx | cut -d: -f1)
    $ echo $start
    11
    $ echo $end
    17

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut
    Bonjour,

    D'accord, je prends en compte vos messages.

    J'ai commencé le reformatage du script.

    J'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
     
    GroupDuplicated=Doublon.txt
    ConfigurationFile=Conf.txt
     
    while read Ligne
    do echo "$Ligne"
            awk 'BEGIN { print "On cherche la ligne avec la variable Ligne"; FS=" "}
            $3 =="$Ligne" { print "Groupe "$3}
            END { print "Vérification terminé"} ' $ConfigurationFile
    done < $GroupDuplicated
    J'essaye de convertir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    StartLine=`grep -nE "object-group network $ligne" $ConfigurationFile | awk -F ":" '{print $1;}'`
    echo $StartLine
    avec un seul awk.
    Je recherche le numéro de la ligne du match.
    La ligne recherchée est de la forme : object-group network $Ligne (d'où mon $3 dans le awk).

    EDIT : Erreur stupide => J'avais mis un espace dans ma comparaison "==".

    Le awk fonctionne mais ne retourne pas le numéro de ligne. J'investigue dessus.

  5. #5
    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
    C'est quoi ton besoin exactement, car je ne vois pas l'utilité de awk ici à part pour remplacer cut ?

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut
    N_BaH a spécifié dans son message que grep + awk équivalait à un awk donc j'essaye de transformer mon grep -nE | awk par un awk tout simplement.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/01/2015, 15h05
  2. [CURL] Transférer une partie d'un fichier sur un serveur ftp
    Par nixmind dans le forum Administration système
    Réponses: 2
    Dernier message: 31/12/2014, 08h25
  3. tri sur une partie d'un champ
    Par yoline dans le forum Access
    Réponses: 4
    Dernier message: 19/09/2005, 11h25
  4. Réponses: 5
    Dernier message: 06/09/2005, 16h01
  5. Changement de couleur de police sur une partie d'un caption
    Par kobe dans le forum Composants VCL
    Réponses: 3
    Dernier message: 11/07/2005, 10h18

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