Saut de ligne en shell

Résolu
johan -  
 johan -
Bonjour,

avec un script shell je parcours un fichier , avec la commande awk. On fait comment pour sauter une ligne? ou mettre le cursuer en debut de la ligne suivante.
A voir également:

8 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Extrait du "man awk" :
       next                   Arrêter  de  traiter  l'enregistrement  d'entrée
                              courant.  L'enregistrement  d'entrée suivant est
                              lu et le traitement  commence  avec  le  premier
                              motif  du  programme  AWK. Si la fin des données
                              d'entrée est atteinte, le ou  les  blocs  END  ,
                              s'il y en a, sont exécutés.
;-))
0
johan
 
Ca ne marche pas :s:s:s

mon script :


awk -F
BEGIN {}

{

if ($1 == "#" && $2="User@Host:" && $3="webdu_webducom[webdu_webducom]”){
{ next;

if($1=="#" && $2=="Query_time:" && $3 >=20 )
then print NR;


}


$0 c'est la ligne sur laquelle on fait le traitement , je vérifie dans cette ligne la si le user est bien webducom , si c'est le cas , je veux passer à la ligne d'après , et vérifier si le query_time est superieur à 20 , si c'est le cas , il m'affiche la ligne , comme ça je vais récupérer les requête aprés!!
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Quelle ligne tu veux récupérer ?
Celle avec le nom du "User@Host" ou celle du "Query_time" ?
0
johan
 
En fait aucune des deux , ce que je veux récupérer c'est la requete qui est tout au début(avant le premier #), mais pour simplifier je veux recuperer le numero de la ligne du query_time , ensuite manuellement , j'irai prendre les requetes.


en résumé! je cherche la requête dont le user est webdu , et dont le query_time est supérieur à 20.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
C'est ça que tu voudrais :
[tmpfs]$ cat foobar
SELECT `pv_datetime` FROM `pligg_pageviews` where `pv_type` = 'story' and `pv_page_id` = 2808 and `pv_user_id` = 0 order by `pv_datetime` DESC Limit 1;
# Time: 090223 2:42:54
# User@Host: root[root] @ localhost []
# Query_time: 4 Lock_time: 0 Rows_sent: 1 Rows_examined: 1
use busi_info11;
SELECT /*!40001 SQL_NO_CACHE */ * FROM `g2_SequenceId`; <=== Requête 1
# Time: 090223 7:37:35
# User@Host: webdu_webducom[webdu_webducom] @ localhost [] 1
# Query_time: 4 Lock_time: 0 Rows_sent: 0 Rows_examined: 70
SELECT `pv_datetime` FROM `pligg_pageviews` where `pv_type` = 'story' and `pv_page_id` = 2808 and `pv_user_id` = 0 order by `pv_datetime` DESC Limit 1;
# Time: 090223 2:42:54
# User@Host: root[root] @ localhost []
# Query_time: 4 Lock_time: 0 Rows_sent: 1 Rows_examined: 1
use busi_info11;
SELECT /*!40001 SQL_NO_CACHE */ * FROM `g2_SequenceId`; <=== Requête 2
# Time: 090223 7:37:35
# User@Host: webdu_webducom[webdu_webducom] @ localhost [] 2
# Query_time: 23 Lock_time: 0 Rows_sent: 0 Rows_examined: 70
SELECT `pv_datetime` FROM `pligg_pageviews` where `pv_type` = 'story' and `pv_page_id` = 2808 and `pv_user_id` = 0 order by `pv_datetime` DESC Limit 1;
# Time: 090223 2:42:54
# User@Host: root[root] @ localhost []
# Query_time: 4 Lock_time: 0 Rows_sent: 1 Rows_examined: 1
use busi_info11;
SELECT /*!40001 SQL_NO_CACHE */ * FROM `g2_SequenceId`; <=== Requête 3
# Time: 090223 7:37:35
# User@Host: webdu_webducom[webdu_webducom] @ localhost [] 3
# Query_time: 14 Lock_time: 0 Rows_sent: 0 Rows_examined: 70
SELECT `pv_datetime` FROM `pligg_pageviews` where `pv_type` = 'story' and `pv_page_id` = 2808 and `pv_user_id` = 0 order by `pv_datetime` DESC Limit 1;
# Time: 090223 2:42:54
# User@Host: root[root] @ localhost []
# Query_time: 4 Lock_time: 0 Rows_sent: 1 Rows_examined: 1
use busi_info11;
SELECT /*!40001 SQL_NO_CACHE */ * FROM `g2_SequenceId`; <=== Requête 4
# Time: 090223 7:37:35
# User@Host: webdu_webducom[webdu_webducom] @ localhost [] 4
# Query_time: 42 Lock_time: 0 Rows_sent: 0 Rows_examined: 70

[tmpfs]$ sed -n '/^SELECT/{
h
n
n
/webdu_webducom\[webdu_webducom\]/{
n
/^# Query_time: [2-9][0-9]\+/{
x
p
}
}
}
' foobar

SELECT /*!40001 SQL_NO_CACHE */ * FROM `g2_SequenceId`; <=== Requête 2
SELECT /*!40001 SQL_NO_CACHE */ * FROM `g2_SequenceId`; <=== Requête 4

[tmpfs]$ 
;-))
0
johan
 
Oui voila , je veux les requetes , mais seulement celles passé par le user : webducom , et qui ont un query_time superieur à 20.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Ben c'est ce que fait le petit script juste au-dessus ;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
johan
 
Exuse moi j'ai pas fait attention à la fin du fichier!!! :D!
Je vais tester ça tout de suite!!
Tu peux m'expliquer rapidement ce qu'il fait stp?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
-n
Affichage à la demande


/^SELECT/{
Si la ligne commence (^) par SELECT


h
On la met dans la mémoire annexe


n
Commande "next". On demande le chargement de la ligne suivante


n
On répète l'opération de façon à avoir la ligne contenant le User@Host dans l'espace de travail


/webdu_webducom\[webdu_webducom\]/{
On vérifie que cette ligne contient bien le motif recherché


n
Dans ce cas on charge la ligne suivante


/^# Query_time: [2-9][0-9]\+/{
On vérifie quelle contient bien le motif voulue (# Query_time: ) suivi par un nombre d'au moins 2 chiffres dont le 1er se situe dans l'intervalle 2 à 9


x
Si c'est le cas, on échange le contenu des 2 mémoires (pour rappel la mémoire annexe contient la ligne avec la requête)


p
On affiche la requête


}
}
}

On referme chaque groupement de commande
0
johan
 
Merci :).

Grâce à toi mon après-midi ne partira pas en fumée pour un script Shell :D.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > johan
 
De rien karine (ou cin, marion, stev, etc) ;-))
0
johan > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
:D mdrrrrrr
0
johan > johan
 
:s :s j'arrive pas à l'executer ... :

sed -n '/^SELECT/{ h n n /webdu_webducom\[webdu_webducom\]/{n /^# Query_time: [2-9][0-9]\+/{ x p }}}' mysql-slow.log
sed: -e expression n°1, caractère 14: caractères inutiles après la commande
[ilyas@localhost ~]$ sed -n '/^SELECT/{ h n n /webdu_webducom\[webdu_webducom\]/{n /^# Query_time: [2-9][0-9]\+/{ x p }}}' mysql-slow.log
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Si tu veux l'exécuter sur une seule ligne il faut la taper comme suit :
sed -n '/^SELECT/{h;n;n;/webdu_webducom\[webdu_webducom\]/{n;/^# Query_time: [2-9][0-9]\+/{x;p};};}'
Sinon il faut respecter la syntaxe et le copier comme je te l'ai donné plus haut.

Autre solution écrire le script dans un fichier texte...
Par exemple, colle ça :
#n

/^SELECT/{
h
n
n
/webdu_webducom\[webdu_webducom\]/{
n
/^# Query_time: [2-9][0-9]\+/{
x
p
}
}
}

dans un fichier texte (appelles-le fich.sed), puis exécute la commande :
sed -f fich.sed le_fichier_à_traiter
;-)
0
johan
 
ok c'est bon ça marche(fich.sed). Un dernier truc (:D) c'est possible de sauvegarder le resultat dans un fichier?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
sed -f fich.sed le_fichier_à_traiter > sauve.txt
;-))
0
johan
 
Parfait , Merci beaucoup , c'est trés gentil :D.
0