grep et affiche la ligne suivante .. - Shell/Batch - Programmation
Marsh Posté le 02-01-2006 à 13:13:07
heu nan ca existe po -A
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 ... ?!:!
Marsh Posté le 02-01-2006 à 23:44:58
GhostDJ a écrit : Bonjour, |
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
Marsh Posté le 03-01-2006 à 00:14:05
Avec sed :
S'il n'y a jamais deux lignes contenant toto qui se suivent :
Code :
|
Sinon :
Code :
|
Marsh Posté le 03-01-2006 à 16:54:07
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
Marsh Posté le 03-01-2006 à 16:59:17
grep + head + tail
Marsh Posté le 04-01-2006 à 22:59:23
trop facile la vie avec awk
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
Marsh Posté le 05-01-2006 à 15:34:49
fuck les erreurs de syntax j'en ai marre ...grrr
tu sais comment lancer en ligne par ligne, histoire de débuger mon truc ?
Marsh Posté le 05-01-2006 à 15:48:56
GhostDJ a écrit : vos commandes ne passant pas : |
et bien tu as presque reussi, il te suffit de faire un head
sed -ne '/toto/,$p' | head 1 ou un truc du genre
Marsh Posté le 05-01-2006 à 16:41:43
GhostDJ a écrit : fuck les erreurs de syntax j'en ai marre ...grrr |
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
Marsh Posté le 06-01-2006 à 21:08:13
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 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)
Marsh Posté le 16-01-2006 à 16:59:23
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 '
Marsh Posté le 16-01-2006 à 23:07:30
GhostDJ a écrit : <DESC>rjgfjlg lkjd monitor's port hj dlkjfg </DESC> |
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...
Marsh Posté le 02-01-2006 à 11:46:21
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