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 :

Extraire des données dans fichier txt


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 262
    Points : 113
    Points
    113
    Par défaut Extraire des données dans fichier txt
    Bonjour,

    Je n'y connait rien en script sh. J'ai un collègue qui m'a fait des petits scripts pour extraire des données dans fichier txt mais il n'est plus dans notre entreprise.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash
     
    fichier_source="vidhosp.txt"
    NoLigne=0
     
    while read ligne
    do
    	NoLigne=$(($NoLigne+1))
     
    #	la ligne a un 0 en position 53
    	if [[ ${ligne:52:1} == "0" ]] ;then
    		echo "$NoLigne : $ligne"
    	fi
    done < $fichier_source

    Je sais qu'il vérifie dans le fichier en position 53 s'il y a un 0.

    Je cherche a faire plus ou moins la même chose mais pour le terme down qui est situé en position 21 ou 22 suivant des adresses Ip.

    Host 192.168.28.0 is down.
    Host 192.168.28.25 is down.

    Merci d'avance

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 587
    Points : 19 467
    Points
    19 467
    Par défaut
    Bonjour,

    down est toujours en fin de ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ $ligne == *down. ]]

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 262
    Points : 113
    Points
    113
    Par défaut
    Merci

    Cela marche

    Mais si dans l’hypothèse ou le terme ne serait pas en fin de ligne, s'il était positionné pas dans une position régulière, quelle est la procédure.

    Merci

  4. #4
    Expert éminent

    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
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Si effectivement comme le dit N_BaH le motif "down." est toujours en dernière position sur la ligne et que le but est de l'afficher avec son numéro de ligne, un simple grep -n 'down\.$' fichier devrait faire l'affaire, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat plop
    Host 192.168.28.0 is down.
    Host 192.168.28.25 is down.
    Host 192.168.28.0 is up.
    Host 192.168.28.25 is up.
    Host 192.168.28.0 is down.
    Host 192.168.28.25 is down.
    Host 192.168.28.0 is up.
    Host 192.168.28.25 is up.
    Host 192.168.28.0 is down.
    Host 192.168.28.25 is down.
    Host 192.168.28.0 is up.
    Host 192.168.28.25 is up
    .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ grep -n 'down\.$' plop 
    1:Host 192.168.28.0 is down.
    2:Host 192.168.28.25 is down.
    5:Host 192.168.28.0 is down.
    6:Host 192.168.28.25 is down.
    9:Host 192.168.28.0 is down.
    10:Host 192.168.28.25 is down.

  5. #5
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Dans le même genre avec awk

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk '/down/ { print NR "  "  $0 }' plop

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 303
    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 303
    Points : 12 802
    Points
    12 802
    Par défaut
    Bonjour,

    Si on reprend ton concept initial:

    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
    $ cat plop
    Host 192.168.28.0 is down.
    Host 192.168.28.25 is down.
    Host 192.168.28.0 is up.
    Host 192.168.28.25 is up.
    Host 192.168.28.0 is down.
    Host 192.168.28.25 is down.
    Host 192.168.28.0 is up.
    Host 192.168.28.25 is up.
    Host 192.168.28.0 is down.
    Host 192.168.28.25 is down.
    Host 192.168.28.0 is up.
    Host 192.168.28.25 is up
    Host 192.168.8.5 is down.
    Host 192.168.28.253 is down.
    Pour uniquement les down en position 22:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -e '^.\{21,21\}down' plop
    Pour les down en position 22 ou 23:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -e '^.\{21,22\}down' plop
    Pour les down a partir de la position 23:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -e '^.\{22,\}down' plop
    Pour les down jusqu' à la position 23:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -e '^.\{0,22\}down' plop
    Si on reprend ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/bash
     
    fichier_source="vidhosp.txt"
    NoLigne=0
     
    while read ligne
    do
    	NoLigne=$(($NoLigne+1))
     
    #	la ligne a un down en position 22 ou 23
    	(echo $ligne | grep -q -e '^.\{21,22\}down') && echo "$NoLigne : $ligne"
    done < $fichier_source
    Cordialement.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 262
    Points : 113
    Points
    113
    Par défaut
    Encore merci pour tout.

    C'est bon j'ai mes réponses.

    Cordialement

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

Discussions similaires

  1. extraction des données de fichier txt dans un tableau?
    Par lina_21 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 18/03/2010, 11h47
  2. [Toutes versions] Extraire des données dans une liste de fichiers
    Par PATMA dans le forum Excel
    Réponses: 1
    Dernier message: 13/10/2009, 22h52
  3. Réponses: 5
    Dernier message: 05/12/2008, 15h23
  4. Réponses: 8
    Dernier message: 06/03/2008, 16h32
  5. Extraire des données dans un fichier .csv
    Par orj30754 dans le forum C
    Réponses: 7
    Dernier message: 03/11/2006, 14h48

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