2017-08-01 3 views
0

J'essaie de trier et de supprimer les lignes en double dans le script bash.Trier et supprimer les lignes en double dans un journal SQL

J'ai un journal sql qui génère l'instruction SQL et le temps d'exécution. Je veux supprimer les lignes qui ont la même instruction SQL et trier en fonction du temps d'exécution. Voici quelques lignes échantillons

tid=0xa3f] Query Executed in 881.3504 ms; rowCount = 0; 
indexesUsed(1):Foo_trade(Results: 0) "select distinct * from fooTable 
where IN SET($1,$2) and jobSource = $3 order by jobId asc" 

tid=0xa3h] Query Executed in 881.3504 ms; rowCount = 0; 
indexesUsed(1):Foo_trade(Results: 0) "select distinct * from fooTable 
where IN SET($1,$2) and jobSource = $3 order by jobId asc" 

tid=0xb38] Query Executed in 138.22551 ms; rowCount = 0; 
indexesUsed(1):Foo_Job(Results: 0) "select distinct * from 
Foo_Job where state IN SET($1,$2) and jobSource = $3 order by jobId asc" 

but: à trier sur la même instruction select pour supprimer les doublons et puis trier par temps d'exécution

+0

Préfixez votre code/données avec quatre espaces blancs. Veuillez jeter un coup d'œil à [edit-help] (http://stackoverflow.com/editing-help). – Cyrus

+0

Je pense que vous avez un problème de formatage dans vos données d'échantillon – niglesias

+0

En outre, vous dites que vous "voulez supprimer les lignes qui ont la même déclaration SQL" - Je suppose que vous voulez garder une de ces lignes. Comment voulez-vous choisir lequel? – niglesias

Répondre

2
awk -F\" '{ match($1,/[[:digit:]]+.[[:digit:]]+/);sql[$2]=substr($1,RSTART,RLENGTH) } END { for (i in sql) { print sql[i]" "i } }' sql.log | sort -k 1 

Utilisez awk pour partager les données avec "comme le délimiteur Stocker les requêtes sql dans un tableau appelé sql, avec les temps de requête.A la fin, bouclez les requêtes.Quand la requête sql est l'élément du tableau, les requêtes seront uniques.Pipe la sortie par le tri pour trier le temps d'exécution s.

+0

merci qui prend soin du tri par le plus long temps mais je veux aussi éliminer la même déclaration SQL – user6381298

+0

à niglesias. Oui je veux garder la ligne avec le temps le plus élevé et enlever les autres – user6381298

+0

J'ai changé la solution pour donner les données requises. –