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

如何使用shell计算多个文件的平均列数

多文件平均列数统计Shell实现方案

基础版(默认空格/制表符分隔列,取每个文件第一行的列数统计)

直接执行以下命令即可,默认统计当前目录下所有文件的平均列数,可自行修改末尾的文件匹配规则(比如把*换成*.txt只统计txt文件)

awk 'FNR == 1 {
    sum += NF
    file_count += 1
}
END {
    printf "总文件数:%d,总列数和:%d,平均列数:%.2f\n", file_count, sum, sum/file_count
}' *

命令说明

  • FNR == 1:限定只处理每个文件的第一行,单个文件只统计一次列数
  • NF:awk内置变量,代表当前行的列数
  • 脚本自动累加所有文件的列数、统计总文件数,最后直接计算平均
  • 示例场景下执行会输出平均列数为4,和需求一致

自定义分隔符版本(如CSV逗号分隔文件)

只需加上-F参数指定分隔符即可,如下统计csv文件的平均列数:

awk -F ',' 'FNR == 1 {
    sum += NF
    file_count += 1
}
END {
    printf "总文件数:%d,总列数和:%d,平均列数:%.2f\n", file_count, sum, sum/file_count
}' *.csv

行列数不统一的兼容版本

如果单个文件内不同行的列数不一致,需要先计算单个文件内所有行的平均列数,再算所有文件的整体平均,使用以下命令:

awk '{
    # 按文件名累加每个文件的总列数、总行数
    file_col_sum[FILENAME] += NF
    file_line_count[FILENAME] += 1
}
END {
    total_avg = 0
    file_count = 0
    for (filename in file_col_sum) {
        # 先算单个文件的平均列数
        total_avg += file_col_sum[filename]/file_line_count[filename]
        file_count += 1
    }
    printf "总文件数:%d,平均列数:%.2f\n", file_count, total_avg/file_count
}' *

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:36:04