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

如何编写Linux脚本计算文本文件中某列数据的平均值

如何编写Linux脚本计算文本文件中某列数据的平均值

别担心,刚接触Linux两天就敢尝试写脚本已经超棒了!你选awk完全找对了方向——它就是专门用来处理这种结构化文本(比如按列排列的数据)的工具,我一步步给你讲明白怎么实现。

先从简单的命令开始理解

假设你有一个数据文件,比如叫data.txt,内容大概是这样(列之间用空格/制表符分隔):

1 23
2 45
3 67
4 89

如果我们要计算第二列的平均值,直接用一条awk命令就能搞定:

awk '{sum += $2; count++} END {print "第二列的平均值是:", sum/count}' data.txt

我给你拆解开每个部分的意思:

  • {sum += $2; count++}:awk会逐行读取文件,每读一行就把当前行第二列($2就是第二列的意思,$1是第一列,以此类推)的数值加到sum(总和变量)里,同时让计数器count加1。
  • END {}:这部分代码会在所有行都处理完之后才执行,我们在这里用总和除以计数,得到平均值并打印出来。

运行这条命令后,你就能看到计算结果啦!

写成可复用的脚本

如果需要经常计算不同文件、不同列的平均值,把命令写成脚本会更方便。我们来写一个叫calc_avg.sh的脚本:

  1. 先创建脚本文件:
touch calc_avg.sh
  1. 用编辑器打开(比如nano calc_avg.sh),把下面的内容粘进去:
#!/bin/bash

# 检查用户是否输入了正确的参数
if [ $# -ne 2 ]; then
    echo "用法:$0 <数据文件名> <要计算的列号>"
    echo "例子:./calc_avg.sh data.txt 3"
    exit 1
fi

# 把用户输入的参数存成变量
filename=$1
column=$2

# 用awk计算平均值,同时处理非数字的情况
awk -v col="$column" '
    {
        # 只处理列内容是数字(包括小数)的行
        if ($col ~ /^[0-9.]+$/) {
            sum += $col
            count++
        }
    }
    END {
        if (count > 0) {
            # 格式化输出,保留两位小数,看起来更友好
            printf "第%s列的平均值是:%.2f\n", col, sum/count
        } else {
            print "错误:第"col"列没有有效的数字数据"
        }
    }' "$filename"
  1. 给脚本加上执行权限:
chmod +x calc_avg.sh
  1. 运行脚本的例子:
./calc_avg.sh data.txt 2

特殊情况处理

  • 如果你的数据是CSV文件(列用逗号分隔),只需要给awk加-F ','参数指定分隔符,比如:
awk -F ',' '{sum += $2; count++} END {print sum/count}' data.csv
  • 如果文件里有空白行或者非数字的内容,我们脚本里的if ($col ~ /^[0-9.]+$/)已经帮你过滤掉了,不会影响计算结果。

刚开始接触这些命令肯定会有点懵,多试几次,调整参数看看效果,很快就能上手啦!

备注:内容来源于stack exchange,提问作者Mhmoud Njedeen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 15:33:06