рассчитать разницу от плоского файла - PullRequest
0 голосов
/ 29 января 2010

У меня есть текстовый файл, и последние 2 строки выглядят так ...

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 или параметр «Вопросы» слишком мал (<100) </p>

(Это статус MySQL, но он не имеет к этому никакого отношения, поэтому тег mysql не применяется)

Ответы [ 3 ]

1 голос
/ 29 января 2010

Небольшое отклонение от (оригинального) ответа 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]
} '
0 голосов
/ 29 января 2010

простак:

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
}
0 голосов
/ 29 января 2010

вот один из способов. Хвост используется для получения последних 2 строк, особенно полезно с точки зрения эффективности, если у вас большой файл.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...