【问题标题】:Assistance with awk/bash to plot memory difference协助 awk/bash 绘制内存差异
【发布时间】:2020-02-11 02:24:33
【问题描述】:

我有一个文件,其中包含重复块中的以下信息。

第一次迭代

xr_lab#show memory compare start
Thu Sep 19 14:38:06.400 WIB   <<<<<<<<<< START TIME
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_start.out
xr_lab#
xr_lab#
xr_lab#show memory compare end
Thu Sep 19 14:40:56.123 WIB   <<<<<<<<<< END TIME
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_end.out
xr_lab#
xr_lab#show memory compare report
Thu Sep 19 14:41:08.084 WIB

PID    NAME                     MEM BEFORE    MEM AFTER  DIFFERENCE MALLOCS-NEW
-------------------------------------------------------------------------------

2550   sysdb_svr_local          7881443     7878256     -3187       87391
7582   mibd_interface           8670334     8484152     -186182     267657

第二次迭代

xr_lab#show memory compare start
Thu Sep 19 14:43:07.946 WIB   <<<<<<<<<< START TIME
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_start.out
xr_lab#
xr_lab#
xr_lab#
xr_lab#show memory compare end
Thu Sep 19 14:45:27.916 WIB   <<<<<<<<<< END TIME
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_end.out
xr_lab#
xr_lab#
xr_lab#show memory compare report
Thu Sep 19 14:45:42.091 WIB

PID    NAME                     MEM BEFORE    MEM AFTER  DIFFERENCE MALLOCS-NEW
-------------------------------------------------------------------------------
6777   ospf                     24294569    24283592    -10977      227389
7582   mibd_interface           8369050     8514825     145775      126259

我想在一列中捕获 {start time, mem_before},在 mibd_interface 的另一列中捕获 {end time, mem_after}。

初步尝试:

awk '/show memory compare start/{
             getline; start=$0;
  }
     /show memory compare end/{
             getline; end=$0;
  }

     /mibd_interface/ {for(i=3; i<5; i++){print start,$i,end,$i}}' file.txt

输出

Thu Sep 19 14:38:06.400 WIB 8670334
Thu Sep 19 14:40:56.123 WIB 8670334
Thu Sep 19 14:38:06.400 WIB 8484152
Thu Sep 19 14:40:56.123 WIB 8484152

期望的输出

Thu Sep 19 14:38:06.400 WIB 8670334
Thu Sep 19 14:40:56.123 WIB 8484152

问题:

  1. 我怎样才能实现上述所需的输出?
  2. 如何将日期格式化为 dd-mm hh:mm:ss 格式?最终,我想将数据输入 gnuplot 以在上面绘制所需的输出,x 轴为时间,y 轴为内存。

参考问题: Assistance with awk/bash to capture memory difference

谢谢。

【问题讨论】:

  • 更改print start,end,$i -> print start,$i; print end,$i ? dd-mm hh:mm:ss awk 具有 mktime 功能,但它需要 完全 YYYY MM DD HH MM SS [DST] 格式,在您的情况下 Sep 很难做到。所以首先用 ex 提取带有数字的日期。 , 使用 awk 作为分隔符,然后为每一行将日期馈送到 GNU date 并将其转换为所需格式的时间戳。如果您想要将日期转换为您的格式的性能,有strptime from dateutils
  • @user,您能否检查一下我的解决方案,如果对您有帮助,请告诉我?

标签: bash awk


【解决方案1】:

我认为您在印刷阶段工作太努力了。这不就是你想要的吗?

/mibd_interface/ {
    print start, $3, "\n" end, $4
}

这样修改,我得到:

$ ./report.awk data
Thu Sep 19 14:38:06.400 WIB 8670334 
Thu Sep 19 14:40:56.123 WIB 8484152

请注意,因为换行字符串后面没有逗号,所以它被连接到 end,这是您想要的,否则在第二行的开头引入一个空格作为字段分隔符。

当然,您也可以使用两个print 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    相关资源
    最近更新 更多