Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1292 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  grep et affiche la ligne suivante ..

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

grep et affiche la ligne suivante ..

n°1275779
GhostDJ
Posté le 02-01-2006 à 11:46:21  profilanswer
 

Bonjour,
 
j'aurais vraiment besoin d'aide :  
 
je souhaite faire un GREP de toto dans un fichier  
 
et afficher la ligne juste en dessous
 
exemple du fichier :  
 
blablab titi
tytytytytyt
blablab toto
tututututut
 
 
je souhaite afficher tutuututut
 
vous voyez le truc ?
 
j'essai de faire un truc du genre : grep toto mon_fic | awk -v NR==NR+1 '{print $0}'
mais ca semble pas correct :p

mood
Publicité
Posté le 02-01-2006 à 11:46:21  profilanswer
 

n°1275795
wackevat
Posté le 02-01-2006 à 12:20:37  profilanswer
 

grep -A ;)

n°1275818
GhostDJ
Posté le 02-01-2006 à 13:13:07  profilanswer
 

heu nan ca existe po -A :p
 
je précise que je suis pas sous linux mais Sun Solaris ...
 
d'autres idées ? doit bien y avoir un truc avec les NR NF ... ?!:!
 
 

n°1276150
Sve@r
Posté le 02-01-2006 à 23:44:58  profilanswer
 

GhostDJ a écrit :

Bonjour,
 
j'aurais vraiment besoin d'aide :  
 
je souhaite faire un GREP de toto dans un fichier  
 
et afficher la ligne juste en dessous
 
exemple du fichier :  
 
blablab titi
tytytytytyt
blablab toto
tututututut
 
 
je souhaite afficher tutuututut
 
vous voyez le truc ?
 
j'essai de faire un truc du genre : grep toto mon_fic | awk -v NR==NR+1 '{print $0}'
mais ca semble pas correct :p


 
Bon, c'est pas possible avec grep.  grep extrait juste la ligne contenant ce que tu cherches et rien d'autre. Pour ça, t'as que "awk"
 
Bon, je tape vite fait un truc qui devrait marcher et t'afficher la ligne contenant "toto" ET la ligne du dessous
awk '{for (i=1; i < NF; i++) {if ($i == "toto" ) flag=2} if (flag != 0) {print $0; flag--}' fichier_a_traiter

n°1276160
Pillow
'cos the trees won't talk
Posté le 03-01-2006 à 00:14:05  profilanswer
 

Avec sed :
 
S'il n'y a jamais deux lignes contenant toto qui se suivent :

Code :
  1. sed -ne '/toto/{n;p}' fichier_a_traiter


Sinon :

Code :
  1. sed -ne ':1;/toto/{n;p;b1}' fichier_a_traiter


n°1276485
GhostDJ
Posté le 03-01-2006 à 16:54:07  profilanswer
 

vos commandes ne passant pas :
j'ai trouvé ceci :  
sed -ne '/toto/,$p' < file.log
 
sauf que là ca m'affiche toutes les lignes qui suivent... il faudrait à présent réussir à choisir : la 1ere ligne qui suit, la 3e ..etc :bounce:

n°1276491
black_lord
Truth speaks from peacefulness
Posté le 03-01-2006 à 16:59:17  profilanswer
 

grep + head + tail
 
[:dawa]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1277296
PierreC
Posté le 04-01-2006 à 22:59:23  profilanswer
 

trop facile la vie avec awk  :pt1cable:  
 
cat fic | awk ' BEGIN {aff=0} {if (aff==1) { print $0 }; if ($0 ~ /toto/) { aff=1} else {aff=0}; } '  
 
Algo :  
j'initialise une variable drapeau (aff) à 0.  
Si aff==1  
 --> j'affiche la ligne
Si la ligne en cours correspond à l'expression régulière toto ( if ($0 ~ /toto/)  )
 --> aff = 1  
 --> sinon aff = 0
 
 
je pense que ca marchera sur sun aussi


---------------
Du tofu en Alsace : www.tofuhong.com
n°1277661
GhostDJ
Posté le 05-01-2006 à 15:34:49  profilanswer
 

fuck les erreurs de syntax j'en ai marre ...grrr
tu sais comment lancer en ligne par ligne, histoire de débuger mon truc ?

n°1277669
weed
Posté le 05-01-2006 à 15:48:56  profilanswer
 

GhostDJ a écrit :

vos commandes ne passant pas :
j'ai trouvé ceci :  
sed -ne '/toto/,$p' < file.log
 
sauf que là ca m'affiche toutes les lignes qui suivent... il faudrait à présent réussir à choisir : la 1ere ligne qui suit, la 3e ..etc :bounce:


et bien tu as presque reussi, il te suffit de faire un head  
 
sed -ne '/toto/,$p' | head 1 ou un truc du genre

mood
Publicité
Posté le 05-01-2006 à 15:48:56  profilanswer
 

n°1277703
PierreC
Posté le 05-01-2006 à 16:41:43  profilanswer
 

GhostDJ a écrit :

fuck les erreurs de syntax j'en ai marre ...grrr
tu sais comment lancer en ligne par ligne, histoire de débuger mon truc ?


 
 
Je comprends pas ta question, lancer koi en ligne par ligne ?  
awk fonctionne en ligne par ligne pour faire du debugage tu ajout des print pour avoir plus d'info.
 
As tu tester ma commande qu'est ce qui marche pas ?
 
 
Sve@r > pas besoin de boucler sur les colonnes, le ~ permet de recherche selon une expression régulère donc sur la ligne entière avec $0
 
GhostDJ > ton idée de ton premier post ne peux pas fonctionner car tu n'envoi dans le awk que les lignes contenant toto.
 
weed > je pense que GhostDJ veux que ca fonctionne sur plusieurs de son fichier, pas une seul

Message cité 1 fois
Message édité par PierreC le 05-01-2006 à 16:43:33

---------------
Du tofu en Alsace : www.tofuhong.com
n°1278424
Sve@r
Posté le 06-01-2006 à 21:08:13  profilanswer
 

PierreC a écrit :

Sve@r > pas besoin de boucler sur les colonnes, le ~ permet de recherche selon une expression régulère donc sur la ligne entière avec $0


 
Merci  :wahoo: Je suis pas assez bon en awk...
 
Petit plus que j'avais mis dans mon algo et qu'on peut intégrer au tien => j'ai mis mon drapeau à 2 et j'affiche toutes les lignes tant qu'il est supérieur à 0 => cela permet ainsi d'avoir juste la ligne sous "toto" (flag=2) ou les 2 lignes sous celle contenant "toto" (flag=3) ou les 3 lignes (flag=4)... ou les "n" lignes (flag=n + 1)  ;)


Message édité par Sve@r le 06-01-2006 à 21:12:31

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1284748
GhostDJ
Posté le 16-01-2006 à 16:59:23  profilanswer
 

ok j'ai trouvé ca :  
 
#!/bin/sh
awk -F"\n" '
{
 for (i=1;i<NF;i++) {
print $i
     if ($i=="monitor" ) { flag=2; print $0; }
 }
 if (flag == 1) { print $0 }
 if (flag!=0) { flag-- }
}' $1
 
 
sauf que j'ai un pb avec un fichier au format XML ca merdoit ...
 
je m'en sors pas ..
je cherche une ligne comme ca :
                                <DESC>rjgfjlg lkjd monitor's port hj dlkjfg </DESC>
je vous dit pas la galere avec les >< et le '

n°1285152
Sve@r
Posté le 16-01-2006 à 23:07:30  profilanswer
 

GhostDJ a écrit :

<DESC>rjgfjlg lkjd monitor's port hj dlkjfg </DESC>
je vous dit pas la galere avec les >< et le '


Ah ben oui, les caractères "<" et ">" étant spéciaux, tu dois les protéger soit entre guillemets simples, soit entre doubles, soit avec un backslash
 
Va récupérer mon cours http://fr.lang.free.fr/cours/Shell_v1.4.pdf. T'as un chapitre complet sur la neutralisation des métacaractères.
 
Sinon ptet que la libXML a été adapée en perl...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1285208
matafan
Posté le 17-01-2006 à 05:19:50  profilanswer
 

awk '/toto/ { getline; print }'

n°1669229
marinaetso​nchat
Posté le 10-01-2008 à 18:07:15  profilanswer
 

awk '/toto/ { print $NR+1 }' fichier


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  grep et affiche la ligne suivante ..

 

Sujets relatifs
passer un tableau et ses valeurs à la page suivante ?demande renseignements concernant la mise en ligne
saut de ligne portableRéalisation d'une aide en ligne
[Heeelp] PHP en ligne de commandeInputStreamReader et lecture de fichiers ligne par ligne
problème spam via formulaire en ligne[ACCESS] plusieurs ligne d'update dans une requete
ça ne s'affiche pas :|cmde grep en language C
Plus de sujets relatifs à : grep et affiche la ligne suivante ..


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR