排序并删除sql日志中的重复行

时间:2017-08-01 16:30:49

标签: bash sorting uniq

我正在尝试排序并删除bash脚本中的重复行。

我有一个sql日志,它输出sql语句和执行时间。我想删除具有相同sql语句的行并根据执行时间进行排序。这是一些样本行

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"

的目标: 排序相同的select语句以删除重复项,然后按执行时间排序

1 个答案:

答案 0 :(得分: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

使用awk将数据拆分为"作为分隔符。将sql查询存储在名为sql的数组中,以及查询时间。最后,循环查询。由于sql查询是数组的元素,因此查询将是唯一的。通过排序管理输出以对执行时间进行排序。