使用AWK按列统计满足多数值条件的实例数量
用AWK批量统计多列多条件的数值满足次数
针对你需要统计多列数据中各条件满足次数的需求,这里提供一个通用的AWK脚本,能一次性处理所有列和指定条件,适配带行列标题的输入文件:
NR == 1 { # 存储列名(跳过第一列的行标题) for (i=2; i<=NF; i++) { col_name[i] = $i } next } { # 遍历每一列的数值(从第二列开始) for (i=2; i<=NF; i++) { val = $i # 按条件计数 if (val >= 0.8) count[i]["ge08"]++ if (val >= 0.9) count[i]["ge09"]++ if (val == 1) count[i]["eq1"]++ } } END { # 按指定格式输出统计结果 for (i=2; i<=length(col_name)+1; i++) { printf "%s: >=0.8: %d, >=0.9: %d, ==1: %d\n", col_name[i], count[i]["ge08"]+0, count[i]["ge09"]+0, count[i]["eq1"]+0 } }
脚本说明
- 表头处理:第一行(
NR==1)提取列名存入数组,后续输出时对应到具体列。 - 数据行处理:对每一行的数值列逐一判断,用二维数组
count[列序号][条件标识]累计各条件的满足次数。 - 结果输出:遍历所有列,按你要求的格式输出,
+0确保没有满足的条件显示为0而非空值。
示例测试
把脚本保存为count_conditions.awk,运行命令:
awk -f count_conditions.awk input.file
针对你提供的示例输入,输出结果为:
Column1: >=0.8: 4, >=0.9: 4, ==1: 0 Column2: >=0.8: 5, >=0.9: 5, ==1: 0 Column3: >=0.8: 5, >=0.9: 5, ==1: 0 Column4: >=0.8: 5, >=0.9: 5, ==1: 0
扩展说明
如果需要添加更多条件(比如>=0.95),只需两步:
- 在数据处理块中添加判断:
if (val >= 0.95) count[i]["ge095"]++ - 在输出块的
printf中追加对应的输出项:, >=0.95: %d,并在参数列表中加入count[i]["ge095"]+0
内容的提问来源于stack exchange,提问作者ThePresident
相关产品推荐
相关产品推荐

