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 :

Imprimer les lignes avant et apres l'expression rechercher


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut Imprimer les lignes avant et apres l'expression rechercher
    J'ai un fichier avec le format suivant :

    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
     
    Fichier : mon_fichier1
    Begin : 2007-08-29
    processed  : 0
    End : 2007-08-29
    Fichier : mon_fichier2
    Begin : 2007-08-29
    processed : 4
    End : 2007-08-29
    Fichier : mon_fichier3
    Begin : 2007-08-29
    processed : 6
    End : 2007-08-29
    Fichier : mon_fichier4
    Begin : 2007-08-29
    processed : 0
    End : 2007-08-29
    Est ce qu'il y a une commande sous unix qui permet d'avoir en sortie tous les nom des fichiers avec : "processed : 0", c.a.d avoir comme sortie dans mon exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Fichier : mon_fichier1
    Begin : 2007-08-29
    processed  : 0
    End : 2007-08-29
    Fichier : mon_fichier4
    Begin : 2007-08-29
    processed : 0
    End : 2007-08-29
    Merci d'avance

  2. #2
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Avec grep (de GNU) c'est simple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     grep  -B2 -A1 "^processed : 0" test.txt

    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Fichier : mon_fichier1
    Begin : 2007-08-29
    processed : 0
    End : 2007-08-29
    --
    Fichier : mon_fichier4
    Begin : 2007-08-29
    processed : 0
    End : 2007-08-29

    man grep :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    .../...
    OPTIONS
           -A NUM, --after-context=NUM
                  Print  NUM  lines  of trailing context after matching lines.  Places a line containing -- between contiguous
                  groups of matches.
    
           -B NUM, --before-context=NUM
                  Print NUM lines of leading context before matching lines.  Places a line containing  --  between  contiguous
                  groups of matches.
    .../...

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par BlaireauOne Voir le message
    Avec grep (de GNU) c'est simple :
    [...]
    Justement mon OS est : HP-UX et les options : -B2 -A1 n'existent pas dans le grep

  4. #4
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Tu peux feinter avec grep qui renvoie le numéro de ligne, ensuite tu joues avec tail et head et ça devrait aller.

  5. #5
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Vous pouvez aussi vous inspirez ce ceci
    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
    #!/bin/ksh
    A=0
    for i in `cat mon_fichier`
    do
        A=`expr $A + 1`
        M_V[$A]=$i
        if [ $A -eq 12 ] 
        then
            if [ "${M_V[9]}" = "0" ] 
            then
                echo ${M_V[1]} ${M_V[2]} ${M_V[3]}
                echo ${M_V[4]} ${M_V[5]} ${M_V[6]}
                echo ${M_V[7]} ${M_V[8]} ${M_V[9]}
                echo ${M_V[10]} ${M_V[11]} ${M_V[12]}
            fi
            A=0
        fi
    done

  6. #6
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Un petit awk, à condition que ton fichier ait une structure bien définie

    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
    20
    21
     
    awk '
    {
    	if ($1 != "Fichier") {
    		print "*** sequence incorrecte sur enreg. "NR" : "$0 
    		exit 1
    	}
    	Wfichier=$0	#-- memorisation enr. fichier
    	getline		#-- lecture         enr. Begin
    	Wbegin=$0	#-- memorisation enr. Begin
    	getline		#-- lecture         enr. processed
    	if ($3 != "0") {
    		getline	#-- lecture enr. End
    		next
    	}
    	print Wfichier
    	print Wbegin
    	print $0
    	getline	#-- lecture enr. End
    	print $0
    } ' fichier

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    ça marche,

    La solution de "BlaireauOne" est très intéressante ça me donne beaucoup d'idées.

    Merci beaucoup à tout le monde ,

  8. #8
    DIE
    DIE est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 101
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par ggnore Voir le message
    Tu peux feinter avec grep qui renvoie le numéro de ligne, ensuite tu joues avec tail et head et ça devrait aller.
    très bonne astuce, je note

  9. #9
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Points : 1 412
    Points
    1 412
    Par défaut
    À titre indicatif, on peut remplacer la vingtaine de lignes awk par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 'N;N;N;/\nprocessed *: *0/!d'

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

Discussions similaires

  1. datagridview: ne pas imprimer les lignes masquées
    Par ozthewizard dans le forum VB.NET
    Réponses: 1
    Dernier message: 15/12/2011, 19h24
  2. Réponses: 7
    Dernier message: 30/06/2011, 00h40
  3. Réponses: 4
    Dernier message: 29/08/2008, 11h53
  4. Imprimer les lignes (Line) d'un état
    Par n1portki dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/07/2007, 09h46
  5. Réponses: 2
    Dernier message: 28/11/2005, 10h12

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