【发布时间】:2020-05-13 17:48:09
【问题描述】:
我是 bash 脚本的新手,我需要制作一个脚本,该脚本将遍历有关已运行作业的日志文件,我需要提取某些值,例如使用的内存,然后是计算使用的内存所请求的内存.
首先,我只是尝试获取一个 grep 命令,该命令将 grep 文件中两个模式之间的值,这将是我编写此脚本的起点。
文件看起来像这样:
20200429:04/29/2020 04:25:32;S;1234567.vpbs3;user=xx 组=xxxxxx=_xxx_xxx_xxxx 作业名=xx_xxxxxx 队列=xxx ctime=1588148732 qtime=1588148732 etime=1588148732 start=1588148732 执行xxx2/1*8 exec_vnode=(xx2:mem=402653184kb:ncpus=8) Resource_List.mem=393216mb Resource_List.ncpus=8 Resource_List.nodect=1 Resource_List.place=free Resource_List.preempt_targets=NONE Resource_List.Qlist=xxxq Resource_List.select=1:mem=393216mb:ncpus=8 Resource_List.walltime=24:00:00 resource_assigned.mem=402653184kb resource_assigned.ncpus=8
粗体的值是我需要提取的。它有多个工作和日期,因此该文件继续包含具有不同日期和数字的数据的多个段落。
通过在线解决类似问题,我想出了:
egrep -Eo 'Resource_List.mem=.{1,50}' sampleoutput.txt | cut -d "=" -f 2-
我得到了多行:
393216mb Resource_List.ncpus=8 Resource_List.nodec
而且我一直不知道如何只获得“393216mb”,因为我从来没有真正使用过 grep 或削减太多。任何建议,即使它不使用 grep,也将不胜感激!
【问题讨论】:
-
如果它们都是这样格式化的行,你可以通过
cut -d' ' -f12,20提供文件,这会给出Resource_List.mem=393216mb resource_assigned.mem=402653184kb。 -
如果您只需要这些值,请将文件输入:
cut -d' ' -f12,20 | sed 's/[^ ]\+=//g',它只提供 RHS 值:393216mb 402653184kb -
@Roadowl 嗯,当我使用我发布的示例文件运行它时,我得到 '20200429:04/29/2020 xx _xxx_xxx_xxxx xx_xxxxxx xxx 1588148732 1588148732 1588148732 1588148732 xxx2/1*8 8 13 mb)无 xxxq 8 24:00:00 402653184kb 8' 所以它更接近等于后的内容大声笑
-
您必须通过
cut -d' ' -f12,20 | sed 's/[^ ]\+=//g'提供文件。