我有一个文本文件,最后两行看起来像这样......
Uptime: 822832 Threads: 32 Questions: 13591705 Slow queries: 722 Opens: 81551 Flush tables: 59 Open tables: 64 Queries per second avg: 16.518
Uptime: 822893 Threads: 31 Questions: 13592768 Slow queries: 732 Opens: 81551 Flush tables: 59 Open tables: 64 Queries per second avg: 16.618
如何找到每个参数的两个值之间的差异? 预期的输出是:
61 -1 1063 10 0 0 0 0.1
换句话说,我想从早期的正常运行时间中扣除当前的正常运行时间值。 找出线程和问题之间的区别等等。
此练习的目的是观察此文件,并在差异过高时提醒用户。对于例如如果慢查询超过500或“Questions”参数太低(<100)
(这是MySQL的状态,但与它无关,所以mysql标签不适用)
答案 0 :(得分:1)
只是在ghostdog74(原创)答案上略有不同:
tail -2 file | awk ' {
gsub(/[a-zA-Z: ]+/," ")
m=split($0,a," ");
for (i=1;i<=m;i++)
if (NR==1) b[i]=a[i]; else print a[i] - b[i]
} '
答案 1 :(得分:0)
这是一种方式。 tail用于获取最后两行,如果你有一个大文件,在效率方面特别有用。
tail -2 file | awk '
{
gsub(/[a-zA-Z: ]+/," ")
m=split($0,a," ")
if (f) {
for (i=1;i<=m;i++){
print -(b[i]-a[i])
}
# to check for Questions, slow queries etc
if ( -(b[3]-a[3]) < 100 ){
print "Questions parameter too low"
}else if ( -(b[4]-a[4]) > 500 ){
print "Slow queries more than 500"
}else if ( a[1] - b[1] < 0 ){
print "mysql ...... "
}
exit
}
for(i=1;i<=m;i++ ){ b[i]=a[i] ;f=1 }
} '
输出
$ ./shell.sh
61
-1
1063
10
0
0
0
0.1
答案 2 :(得分:0)
GAWK:
BEGIN {
arr[1] = "0"
}
length(arr) > 1 {
print $2-arr[1], $4-arr[2], $6-arr[3], $9-arr[4], $11-arr[5], $14-arr[6], $17-arr[7], $22-arr[8]
}
{
arr[1] = $2
arr[2] = $4
arr[3] = $6
arr[4] = $9
arr[5] = $11
arr[6] = $14
arr[7] = $17
arr[8] = $22
}