Linux怎么使用awk计算某一列数据的总和与算术平均值

落明君_4559

落明君_4559

2026-11-07

306人浏览

原创

最简列求和写法为awk '{sum += $N} END {print sum}' file,N为列号;求平均值须同步统计有效行数并校验数字格式,避免除零错误。

linux怎么使用awk计算某一列数据的总和与算术平均值

用 awk 对指定列求和:最简写法与字段索引控制

直接用 awk '{sum += $N} END {print sum}' file,其中 N 替换为列号(如第3列就写 $3)。注意:$0 是整行,$1 是第一列,不能写成 $n 或漏掉 $ 符号。

常见错误是把列号当字符串处理(比如写成 $"3"),或者没加 END 块导致每行都输出一次中间结果。空行或非数字内容会让 sum 累加 0(awk 自动类型转换),但若该列含单位(如 123KB)则整个字段被转为 0,需先清洗。

  • 列号从 1 开始计数,不是 0
  • 字段分隔符默认为空格/制表符,若文件是 CSV,加 -F','
  • 想跳过标题行?加 NR > 1 条件:awk 'NR > 1 {sum += $4} END {print sum}' file

awk 计算某列平均值:必须同时统计行数与总和

不能只靠 sum / NR —— NR 是总行数,但可能包含空行、标题行或无效数据行。正确做法是单独计数有效行:awk '$N != "" && $N ~ /^[+-]?[0-9]*\.?[0-9]+$/ {sum += $N; count++} END {if (count) print sum/count}' file。

这个正则判断能过滤掉纯文本、空字段和非法数字(如 abc、12.3.4)。如果确定数据干净,可简化为 awk '{sum += $2; n++} END {print sum/n}' file,但生产环境建议加校验。

  • 除零错误会输出 inf 或报错,if (count) 判断必不可少
  • printf "%.2f" 可控制小数位:END {if(count) printf "%.3f\n", sum/count}
  • 浮点精度问题极少影响平均值计算,无需额外处理

一行命令同时输出总和与均值:避免重复扫描文件

文件大时别跑两遍 awk。用一个命令完成:awk '{sum += ; n++} END {if(n) {print "sum:", sum; print "avg:", sum/n}}' data.txt。

Linuxdo Application
Linuxdo Application

为 Linux.do 注册撰写高通过率、去 AI 化的中文小作文。进行自适应调查以了解申请人的真实背景,...

下载

更紧凑的写法是用分号合并输出:awk '{s+=$3;n++} END{if(n)print "sum="s,"avg="s/n}' file。变量名用单字母(如 s, n)不影响可读性,反而减少打字出错概率。

  • 不加 if(n) 在空文件中会导致除零,输出 avg=-nan 或报错,取决于 awk 实现(mawk 和 gawk 行为略有不同)
  • 字段含负数完全没问题,awk 原生支持
  • 如果列里混有科学计数法(如 1.23e+04),仍能正常解析

遇到非标准分隔符或带引号字段怎么办

awk 默认不处理 CSV 中的双引号包裹字段(如 "a,b",123,"c"),此时 -F',' 会错误切分。简单场景可用 sed 预处理:sed 's/"//g' file | awk -F, '{sum += $2} END {print sum}';复杂结构应换用 csvtool 或 python -c,硬用 awk 解析带引号 CSV 容易漏边角 case。

另一个典型问题是列内含空格但又不是分隔符,例如日志中 [INFO] 2024-04-01 10:23:45 value=123,想取 value=123 的数值部分。这时别死磕字段序号,改用正则提取:awk 'match($0, /value=([0-9]+)/, arr) {sum += arr[1]} END {print sum}' file(要求 gawk 4.0+)。

  • mawk 不支持 match() 的第三个参数,得用 substr + index 组合
  • 用 cut -d' ' -f5 | awk '{sum += $1} END {print sum}' 是更稳的替代方案,尤其当格式固定时
  • 字段含逗号又无引号?基本已超出 awk 单工具合理处理范围

实际用的时候,最常被忽略的是数据有效性校验和空文件兜底——这两处不处理,脚本在自动化流程里突然挂掉,原因往往卡在看似最简单的那一行 sum/n 上。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4430

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3713

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

3013

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

7450

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

7082

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

4033

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3525

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3779

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观shell视频教程
尚观shell视频教程

共8课时 | 1.9万人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习