bash - 协助 awk/bash 绘制内存差异
问题描述
我有一个文件,其中包含重复块中的以下信息。
第一次迭代
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
问题:
- 我怎样才能达到上面想要的输出?
- 如何将日期格式化为 dd-mm hh:mm:ss 格式?最终,我想将数据输入 gnuplot 以在上面绘制所需的输出,x 轴为时间,y 轴为内存。
参考问题: 协助 awk/bash 捕捉内存差异
谢谢。
解决方案
我认为你在印刷阶段工作太努力了。这不就是你想要的吗?
/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
语句。
推荐阅读
- java - 具有不同系统属性值的多个 Maven 插件执行
- haskell - Haskell 中的类型和类型变量
- sql - 用于检查结果集是否仅来自给定值集的 SQL 查询
- python - QProgressBar 不显示复制进度
- c - 当我输入 case 触发器时,switch 语句注册为默认值
- angular - Mat Expansion 面板在按下 Enter 时关闭
- php - fsockopen 仅用于检查端口 80 和 8000(没有其他端口)
- python - 无法解码任何 JSON 对象(请求 + 熊猫)
- zurb-foundation - 更新已有插件的元素
- reactjs - 样式化组件,定义为 defaultProps 的所需道具显示为缺失