Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2010, 21h41   #1
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 142
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 142
Points : 33
Points : 33
Par défaut Trouver la ligne du dernier motif d'un grep

Bonjour,

Un programme me sort dans un fichier texte une suite de tableaux (5 colonnes de chiffres)
chaque tableau est introduit par la même chaîne de caractères.
Je voudrais extraire le dernier tableau.
Pour l'instant la seule solution technique que j'aie trouvé c'est :
Déterminer le nombre de lignes dans le fichier
Comme il y a toujours le même nombre de ligne dans le tableau supprimer le nombre de ligne du tableau pour retrouver la première ligne de tableau.
copier à partir de là.
D'où ma question :
Est-il possible de faire un grep ou une commande du même genre et de là déterminer le numéro de la ligne où apparaît pour la dernière fois le motif ?

Merci
Erlen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 21h47   #2
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Citation:
Envoyé par Erlen Voir le message
Je voudrais extraire le dernier tableau.
Le plus simple, c'est d'utiliser awk
becket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/12/2010, 21h59   #3
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 142
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 142
Points : 33
Points : 33
Oui sans doute mais il faudrait être plus précis parce que je suis pas un grand connaisseur, et awk c'est vaste très vaste (peut être trop ?)
Erlen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 22h05   #4
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Citation:
Envoyé par Erlen Voir le message
Oui sans doute mais il faudrait être plus précis parce que je suis pas un grand connaisseur, et awk c'est vaste très vaste (peut être trop ?)
Et tu veux que je ponde le code pour toi ?
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 22h08   #5
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 534
Points : 7 741
Points : 7 741
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
$ cat toto
1 2 3 4 5
z b c f d
z b c f d
z b c f d
z b c f d
z b c f d
z b c f d
z b c f d
z b c f d
$ grep z toto | cat -n | awk '{print $1}' | tail -1
8
$
ca c'est la façon moche de faire mais comprehensible par tout le monde
ici on cherche la derniere ligne contenant "z"
la meme chose bien plus simplement notez que sed compte les lignes depuis 1 et pas depuis 0 :
Code :
1
2
3
$ sed -n '/z/=' toto | tail -1
9
$
frp31 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 22h14   #6
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 142
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 142
Points : 33
Points : 33
Pourquoi pas c'est toujours gentil et ça me ferait forcement gagner du temps !
J'ai oublié de stipuler que j'utilise bash donc je sais pas coder directement en awk.
En fait je connais pas awk j'ai utilisé quelque fois des commandes awk dans des scripts bash mais pas grand chose de plus.
Donc quand tu dis il faut utiliser awk tu comprends que ça me fait pas avancer.
Sans forcement avoir le code, quelle fonction de awk tu utiliserais si j'arrive pas à l'utiliser alors je demanderais plus d'aide.
Merci
Erlen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 22h20   #7
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 142
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 142
Points : 33
Points : 33
frp31 deux questions :
Dans les deux cas pourquoi le tail -1 ?
dans le cas du awk pourquoi le cat ?
Erlen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 23h49   #8
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
En awk ( pseudo-code ) - Recherche générique

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
DEBUT{
 
}
{
  SI ( LIGNE ~ /SEPARATEUR D'EREGISTREMENT/ ) {
    ON EST SUR UN NOUVEL ENREGISTREMENT 
    SI (MATCH)  ON COPIE LE CONTENU DU TABTMP DANS LASTMATCH
    RESET_VARIABLE    
  }
  SINON 
  {
    ON COPIE LA LIGNE DANS NOTRE TABTMP 
     SI ( LIGNE = CORRESPOND A LA RECHERCHE ) 
     {
            ON A UN MATCH
     }
 
  }
 
}
END 
{
 AFFICHE LAST_MATCH
}
becket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/12/2010, 18h36   #9
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 534
Points : 7 741
Points : 7 741
Citation:
Envoyé par Erlen Voir le message
frp31 deux questions :
Dans les deux cas pourquoi le tail -1 ?
dans le cas du awk pourquoi le cat ?

man tail et accessoirement testes le sans pour comprendre
man cat et accessoirement testes le sans pour comprendre

frp31 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2010, 13h26   #10
Membre régulier
 
Inscription : mars 2007
Messages : 88
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Belgique

Informations forums :
Inscription : mars 2007
Messages : 88
Points : 83
Points : 83
Par défaut meme pas besoin de awk

les données :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cat test.dat
a:1 2 3 4 5
b:2 3 4 5 6
c:3 4 5 6 7
a:4 5 6 7 8
b:5 6 7 8 9
c:6 7 8 9 10
a:7 8 9 10 11
b:8 9 10 11 12
c:9 10 11 12 13
a:10 11 12 13 14
b:11 12 13 14 15
c:12 13 14 15 16
a:13 14 15 16 17
b:14 15 16 17 18
c:15 16 17 18 19
le code :
Code :
1
2
$ grep a test.dat | tail -1
a:13 14 15 16 17
rafuoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 22h11   #11
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
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 : 3 534
Points : 7 741
Points : 7 741
Citation:
Envoyé par rafuoner Voir le message
les données :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cat test.dat
a:1 2 3 4 5
b:2 3 4 5 6
c:3 4 5 6 7
a:4 5 6 7 8
b:5 6 7 8 9
c:6 7 8 9 10
a:7 8 9 10 11
b:8 9 10 11 12
c:9 10 11 12 13
a:10 11 12 13 14
b:11 12 13 14 15
c:12 13 14 15 16
a:13 14 15 16 17
b:14 15 16 17 18
c:15 16 17 18 19
le code :
Code :
1
2
$ grep a test.dat | tail -1
a:13 14 15 16 17
mais tu choppes pas le n° de la ligne !

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ cat c
a:1 2 3 4 5
b:2 3 4 5 6
c:3 4 5 6 7
a:4 5 6 7 8
b:5 6 7 8 9
c:6 7 8 9 10
a:7 8 9 10 11
b:8 9 10 11 12
c:9 10 11 12 13
a:10 11 12 13 14
b:11 12 13 14 15
c:12 13 14 15 16
a:13 14 15 16 17
b:14 15 16 17 18
c:15 16 17 18 19
$ grep -n a c | tail -1
13:a:13 14 15 16 17
$ # la oui
$
frp31 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h31.


 
 
 
 
Partenaires

Hébergement Web