Saut de ligne en shell
Résolu
johan
-
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.
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.
Configuration: Windows XP Firefox 3.0.10
A voir également:
- Saut de ligne en shell
- Classic shell - Télécharger - Personnalisation
- Partage de photos en ligne - Guide
- Saut de colonne word - Guide
- Formulaire en ligne de meta - Guide
- Comment supprimer une page sur word avec un saut de page ? - Guide
8 réponses
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]$ ;-))
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!!