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

Unix awk提取带引号第8列唯一值并统计16至28列总和方法

问题原因

awk默认以空格作为字段分隔符,无法识别双引号包裹的含空格内容为单个字段,导致包含空格的第8列被拆分为多个字段,出现截断问题。

解决方案

使用GNU awk(gawk,大部分Linux/Unix发行版默认awk为gawk)的FPAT特性,直接定义字段的匹配规则,正确识别双引号包裹的完整字段:

gawk '
BEGIN {
    # 定义字段匹配规则:要么是不含空格的连续字符,要么是双引号包裹的任意内容
    FPAT = "([^[:space:]]+)|(\"[^\"]+\")"
}
{
    # 去除第8列前后的双引号,作为分组key
    key = substr($8, 2, length($8) - 2)
    total = 0
    # 累加第16到28列的数值
    for (i = 16; i <= 28; i++) {
        total += $i
    }
    res[key] += total
}
END {
    # 遍历输出结果
    for (key in res) {
        print key, res[key]
    }
}' File.txt

输出效果

针对提供的样例文件,执行后输出结果和预期完全一致:

0ICPRP900 0.006641
0ICPRP 900 0.01
0ICPRP A&B_900 0.641

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 15:36:02