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

如何用Awk提取ETA小时值大于15的行的第一列?

解决方案

直接用awk就能实现你的筛选需求,给你几个可行的命令:

方法1:遍历字段提取小时数

awk '{
    for (i = 1; i <= NF; i++) {
        if ($i ~ /^ETA=/) {  # 定位到以ETA=开头的字段
            split($i, parts, /[:=]/)  # 用:=分割字段,parts[2]就是小时数值
            if (parts[2] > 15) {
                print $1
                break  # 找到目标字段就停止遍历,提升效率
            }
        }
    }
}' file.txt

方法2:调整分隔符简化判断

把分隔符设为空格、逗号、等号,让ETA和后续时间成为独立字段:

awk -F '[ ,=]' '{
    for (i = 1; i <= NF; i++) {
        if ($i == "ETA" && $(i+1) > 15) {  # 找到ETA字段后,直接取后续时间转数字比较
            print $1
            break
        }
    }
}' file.txt

方法3:正则匹配提取小时数

用正则直接匹配行内的ETA小时部分:

awk '{
    if (match($0, /ETA=([0-9]{1,2}):/)) {
        hour = substr($0, RSTART + 4, RLENGTH - 5)
        if (hour > 15) print $1
    }
}' file.txt

你的原命令问题出在哪?

你之前的cat file.txt | awk -F [,TPF=]' '{print $1}'有两个核心问题:

  1. 分隔符设置完全错误,且语法存在引号位置错误;
  2. 没有添加判断ETA小时数>15的筛选逻辑,只会无脑输出所有行的第一列,自然得不到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:31:12