侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

统计目录下所有文本文件的行数总和

2025-12-12 / 0 评论 / 3 阅读

题目

统计目录下所有文本文件的行数总和

信息

  • 类型:问答
  • 难度:⭐

考点

文件遍历,条件判断,命令替换,变量操作

快速回答

使用Shell脚本统计指定目录下所有.txt文件的总行数:

  1. 遍历目录中的所有文件
  2. 检查文件扩展名是否为.txt
  3. 使用wc -l统计每个文件行数
  4. 累加行数到总和变量

示例代码:
total=0
for file in dir/*.txt; do
[[ -f "$file" ]] && ((total += $(wc -l < "$file")))
done
echo "总行数: $total"

解析

问题场景

在日志分析、数据处理等场景中,经常需要统计某个目录下所有文本文件的总行数,这是Shell脚本的基础应用。

解决方案

#!/bin/bash
dir="/path/to/directory"  # 目标目录
total_lines=0

# 遍历目录中的.txt文件
for file in "$dir"/*.txt; do
    # 检查是否为普通文件(非目录/链接)
    if [[ -f "$file" ]]; then
        # 统计文件行数并累加
        lines=$(wc -l < "$file")
        total_lines=$((total_lines + lines))
    fi
done

echo "总行数: $total_lines"

核心原理

  • 文件遍历for file in $dir/*.txt 使用通配符匹配所有.txt文件
  • 条件判断[[ -f "$file" ]] 确保处理的是普通文件(排除目录等)
  • 命令替换$(wc -l < "$file") 获取文件行数(< 避免输出文件名)
  • 变量操作$(( )) 进行整数运算累加行数

最佳实践

  • 始终用双引号包裹变量(如"$file"),防止文件名含空格时出错
  • 使用wc -l < file 替代wc -l file,避免解析文件名
  • 添加错误处理:if [ ! -d "$dir" ]; then echo "目录不存在"; exit 1; fi

常见错误

错误示例后果修正方案
for file in *.txt目录路径错误时匹配当前目录文件明确指定"$dir"/*.txt
lines=`wc -l "$file"`输出包含文件名导致计算错误改用wc -l < "$file"
total_lines += lines语法错误使用$((total + lines))

扩展知识

  • 递归统计子目录:改用find "$dir" -name "*.txt" -type f配合while read循环
  • 性能优化:大文件场景可用awk 'END{print NR}' file替代wc
  • 其他文件类型:修改通配符(如*.log)或使用case语句支持多扩展名