【问题标题】:grep a string between two patterns multiple instances in a file?grep 两个模式之间的字符串 文件中的多个实例?
【发布时间】: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' 提供文件。

标签: bash grep


【解决方案1】:

用途:

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

【讨论】:

  • 这很完美!有什么方法可以添加到 1234567.vpbs3 中的 1234567 吗?
  • grep -o -E 'Resource_List.mem=[^\ ]+|resource_assigned.mem=[^\ ]+|[0-9]+\.vpbs3' 有效,但我感觉 vpbs3 是机器名称或节点名称,可以变化,对吧?
  • 其实是job id!但是是的,它会有所不同
  • 如果这是对您有帮助的答案,请您投赞成票吗?谢谢!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 2020-10-29
    • 1970-01-01
    • 2018-08-25
    • 2023-04-04
    • 2014-12-08
    • 2016-11-20
    • 2020-06-23
    相关资源
    最近更新 更多