grep文件中两个实例之间的两个模式之间的字符串?

时间:2020-05-13 17:48:09

标签: bash grep

我是bash脚本的新手,我需要制作一个脚本来处理有关已运行作业的日志文件,并且需要提取某些值(例如使用的内存),然后提取请求的内存来计算使用的内存。

首先,我只是尝试获取一个grep命令,该命令将在文件的两个模式之间grep一个值,这将是此脚本的起点。

文件看起来像这样:

20200429:04/29/2020 04:25:32; S; 1234567.vpbs3;用户= xx组= xxxxxx = _xxx_xxx_xxxx作业名称= xx_xxxxxx队列= xxx ctime = 1588148732 qtime = 1588148732 etime = 1588148732 start = 1588148732 exec_host = 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

由于我从未真正使用过grep或削减过很多,所以我只能选择如何获得“ 393216mb”。任何建议,即使它不使用grep,也将不胜感激!

2 个答案:

答案 0 :(得分:0)

非常接近! .是通配符,您要匹配数字。

egrep -Eo 'Resource_List.mem=[0-9]*..' sampleoutput.txt

答案 1 :(得分:0)

使用:

grep -o -E 'Resource_List.mem=[^\ ]+|resource_assigned.mem=[^\ ]+'
相关问题