如何用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}'有两个核心问题:
- 分隔符设置完全错误,且语法存在引号位置错误;
- 没有添加判断ETA小时数>15的筛选逻辑,只会无脑输出所有行的第一列,自然得不到预期结果。
内容的提问来源于stack exchange,提问作者ARthur
相关产品推荐
相关产品推荐

