如何使用grep或awk获取日志中2次读取的时间差

How to use grep or awk to get the time difference between 2 reads in the log

您好,我主要想知道交易之间的时差。下面是一个例子:

1000 mem_rd
1100 mem_wr
1200 mem_rd
1300 mem_wr
1500 mem_rd
1650 mem_rd

第一列是时间,第二列是交易类型。我只想查看 mem_rd 和使用任何命令行代码的 2 个事务之间的时间差。以下是预期的输出:

0   mem_rd
200 mem_rd
300 mem_rd
150 mem_rd

这是一个 one-line 解决方案:

cat file.txt | awk 'BEGIN {t0=0}; /mem_rd/ {t1=; if(t0==0) t0=t1; printf("%-3d %s\n", t1-t0, ); t0=t1}'

或者同样的东西,但是写在脚本文件中以使其更具可读性:

$ cat script.awk
BEGIN {t0=0}
/mem_rd/ {
  t1=;
  if(t0==0)
    t0=t1;
  printf("%-3d %s\n", t1-t0, );
  t0=t1}

$ awk -f script.awk file.txt
0   mem_rd
200 mem_rd
300 mem_rd
150 mem_rd