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

求助:如何用awk实现两行合并与重复条目求和

解决方案

一步完成合并+去重求和的命令

用awk可以一次性完成两行合并、重复条目求和的操作,同时处理可能的格式异常:

zcat file.tar.gz | awk '
# 奇数行:保存条目名称,清理末尾多余空白/控制字符
NR%2 { 
    key = $0; 
    gsub(/[[:space:]]+$/, "", key); 
    next 
}
# 偶数行:将对应数值累加到条目总和中
{ sum[key] += $0 }
# 所有行处理完毕后输出结果
END {
    for (k in sum) {
        print k ": " sum[k]
    }
}'

如果需要按条目名称排序输出,在命令末尾追加管道排序:

zcat file.tar.gz | awk '
NR%2 { 
    key = $0; 
    gsub(/[[:space:]]+$/, "", key); 
    next 
}
{ sum[key] += $0 }
END {
    for (k in sum) {
        print k ": " sum[k]
    }
}' | sort

之前命令的问题分析

  • 第一个命令错误:awk 'NR%2{v=$0;next;}{print $0,v}' 把**数值行(当前$0)**放在了前面,条目(v)在后面,输出顺序完全颠倒,正确写法应为print v ": " $0。
  • 第二个命令出现错乱:大概率是条目行末尾存在多余的换行符(比如Windows格式的\r)或空白字符,导致和数值拼接时出现异常。上面的解决方案用gsub(/[[:space:]]+$/, "", key)清理了这些干扰字符,可避免此类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:10:54