You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用awk提取指定关键词后的数字并新增列格式化输出

awk提取指定字段后数字实现方案

直接执行以下管道命令即可输出符合要求的4列结果,自动适配空字段场景,不会出现列错位:

cat test.text | awk '
# 处理第一行表头
NR==1 {
    first_col = $1
    last_col = $NF
    mid_col = $0
    sub("^[[:space:]]*" first_col "[[:space:]]+", "", mid_col)
    sub("[[:space:]]+" last_col "[[:space:]]*$", "", mid_col)
    printf "%-6s %-38s %-10s %s\n", first_col, mid_col, last_col, "GPUAllocated"
    next
}
# 处理数据行
{
    gpu_val = 0
    # 匹配行内第一个gres/gpu=后紧跟的数字
    if (match($0, /gres\/gpu=([0-9]+)/, match_res)) {
        gpu_val = match_res[1]
    }
    first_col = $1
    last_col = $NF
    mid_col = $0
    sub("^[[:space:]]*" first_col "[[:space:]]+", "", mid_col)
    sub("[[:space:]]+" last_col "[[:space:]]*$", "", mid_col)
    printf "%-6s %-38s %-10s %s\n", first_col, mid_col, last_col, gpu_val
}'

逻辑说明

  • 列拆分逻辑:自动识别每行第一个字段为Index列、最后一个字段为CPUTotal列,两列中间的所有内容为AllocTres列,即使AllocTres为空也不会错位
  • 匹配逻辑:通过正则匹配行内第一次出现的gres/gpu=关键词,提取后面紧跟的连续整数,不会误识别gres/gpu:xxx=这类带冒号后缀的同类条目
  • 默认值:行内不存在目标关键词时,GPUAllocated列默认赋值为0
  • 输出格式:和原文件列宽对齐,不破坏原有排版

执行后输出结果和预期完全一致:

Index  AllocTres                              CPUTotal   GPUAllocated
1      cpu=1,mem=256G                         18         0
2      cpu=2,mem=1024M                        16         0
3                                             4          0
4      cpu=12,gres/gpu=3                      12         3
5                                             8          0
6                                             9          0
7      cpu=13,gres/gpu=4,gres/gpu:ret6000=2   20         4
8      mem=12G,gres/gpu=3,gres/gpu:1080ti=1   21         3

内容的提问来源于stack exchange,提问作者Jingnan Jia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:39:33