Python如何统计已有旧内容的文件中后续新增追加的行数
解决方案
方法1:提前记录文件初始行数(最常用,适合主动监控场景)
在开始监控追加内容前,先记录当前文件的总行数,后续统计时做差值计算即可:
- 第一步:记录初始行数
initial_lines=$(wc -l < 目标文件路径) - 第二步:统计新增行数时执行如下命令即可得到结果
echo $(( $(wc -l < 目标文件路径) - initial_lines ))
该方案准确性最高,只要原有内容不出现行删除、拆分或合并,统计结果不会出现偏差
方法2:基于字节偏移量统计(适合无法提前记录初始行数的场景)
如果已经错过了记录初始行数的时间点,可以通过字节偏移量定位旧内容末尾位置,再统计新增内容:
- 场景A:可以确认旧内容完全不会被修改
先记录旧文件的总字节大小:old_size=$(stat -c %s 目标文件路径)
后续统计新增行数时执行:tail -c +$((old_size + 1)) 目标文件路径 | wc -l - 场景B:不知道旧文件初始大小,仅知道旧内容末尾的特征文本
通过特征行定位偏移量:old_offset=$(grep -F "旧内容最后一行的完整文本" 目标文件路径 | tail -1 | wc -c)
再统计偏移量之后的行数:tail -c +$((old_offset + 1)) 目标文件路径 | wc -l
方法3:实时监控追加内容计数(适合持续统计增量的场景)
如果需要从当前时间点开始,实时统计所有后续追加的行,可以用如下脚本实现:
#!/bin/bash target_file="替换为你的目标文件路径" add_count=0 # 直接跳到文件末尾,避免统计旧内容 tail -f -n 0 "$target_file" | while read -r line; do ((add_count++)) echo "当前累计新增行数: $add_count" # 如需持久化计数,可新增逻辑将add_count写入本地存储文件 done
脚本重启后计数会重置,如有长期统计需求可自行添加计数持久化逻辑
内容的提问来源于stack exchange,提问作者Shimizuu
相关产品推荐
相关产品推荐

