我正在尝试排序并删除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语句以删除重复项,然后按执行时间排序
答案 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查询是数组的元素,因此查询将是唯一的。通过排序管理输出以对执行时间进行排序。