Saut de ligne en shell
Résolu
johan
-
johan -
johan -
A voir également:
- Saut de ligne en shell
- Partage de photos en ligne - Guide
- Classic shell - Télécharger - Personnalisation
- Mètre en ligne - Guide
- Formulaire en ligne de meta - Guide
- Comment supprimer une page sur word avec un saut de page ? - Guide
8 réponses
Salut,
Extrait du "man awk" :
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.;-))
Quelle ligne tu veux récupérer ?
Celle avec le nom du "User@Host" ou celle du "Query_time" ?
Celle avec le nom du "User@Host" ou celle du "Query_time" ?
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.
en résumé! je cherche la requête dont le user est webdu , et dont le query_time est supérieur à 20.
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]$;-))
Oui voila , je veux les requetes , mais seulement celles passé par le user : webducom , et qui ont un query_time superieur à 20.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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?
Je vais tester ça tout de suite!!
Tu peux m'expliquer rapidement ce qu'il fait stp?
-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
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
: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
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
Si tu veux l'exécuter sur une seule ligne il faut la taper comme suit :
Autre solution écrire le script dans un fichier texte...
Par exemple, colle ça :
dans un fichier texte (appelles-le fich.sed), puis exécute la commande :
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;-)
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!!