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

发布于 2025-01-11 04:11:59 字数 267 浏览 0 评论 0原文

嗨,我基本上想知道交易之间的时间差。下面是一个示例:

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

Hi I basically want to know the time difference between transactions. Below is an example:

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

The first column is time and 2nd is transaction type. I only want to see mem_rd and the time difference between 2 transactions using any command line code. Below is the expected output:

0   mem_rd
200 mem_rd
300 mem_rd
150 mem_rd

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌吟 2025-01-18 04:11:59

这是一个单行解决方案:

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

或者相同的事情,但编写在脚本文件中以使其更具可读性:

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

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

Here's a one-line solution:

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

Or the same thing, but written in a script file to make it more readable:

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

$ awk -f script.awk file.txt
0   mem_rd
200 mem_rd
300 mem_rd
150 mem_rd
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文