Linux下如何按条件统计多文件行数并汇总结果
在Linux中统计多文件中数值大于60的行数并汇总结果
解决方案命令
直接使用以下awk命令即可实现需求,同时保证格式与期望输出一致:
BEGIN {printf "%8s %6s\n", "file", "Count"} FNR==1 {next} $2+0>60 {count[FILENAME]++} END {for (f in count) printf "%8s %6d\n", f, count[f]}
执行时将所有目标文件作为参数传入:
awk 'BEGIN {printf "%8s %6s\n", "file", "Count"} FNR==1 {next} $2+0>60 {count[FILENAME]++} END {for (f in count) printf "%8s %6d\n", f, count[f]}' sample1.txt sample2.txt sample3.txt
执行结果
file Count sample1 2 sample2 4 sample3 2
命令解释
BEGIN块:在处理任何文件前打印对齐的表头,用printf控制列宽保证格式统一。FNR==1 {next}:跳过每个文件的第一行(表头行),FNR是当前文件的行号,每个文件开始时会重置为1,以此精准跳过表头。$2+0>60 {count[FILENAME]++}:将第二列转换为数值类型(避免字符串比较的误差),若数值大于60,则对当前文件的计数加1,用数组count按文件名存储每个文件的统计结果。END块:遍历计数数组,打印每个文件的名称和对应的符合条件行数,同样用printf保证格式对齐。
原命令问题分析
- 未跳过表头:原命令没有处理表头行,会把第一行的
value(第二列)当作字符串与60比较,字符串比较逻辑与数值不同,导致错误统计表头。 - 不支持多文件汇总:原命令仅处理单个文件,没有用数组记录每个文件的独立计数,无法输出多文件的汇总结果。
内容的提问来源于stack exchange,提问作者Alegría
相关产品推荐
相关产品推荐

