Linux目录中基于issue_date统计唯一证书数量(处理重复项)
高效处理压缩CSV文件的唯一证书统计方案
命令行本地处理方案
你的原命令仅做了行数统计,未处理跨文件重复的证书。要实现目标,核心是先提取指定issue_date对应的唯一证书标识(cert_id+serial),再统计去重后的数量,以下是两种实用方案:
方案1:用awk内存去重(速度最快,适合证书数量不超内存的场景)
假设CSV以逗号分隔,issue_date是第1列,cert_id是第2列,serial是第3列,执行:
# .gz文件用zcat,若.gmz是gzip变种,替换为gzip -dc zcat *2023-05-11*.gz | awk -F ',' '$1 == "2023-05-11" {key=$2","$3; seen[key]} END {print length(seen)}'
- 逻辑:用awk数组
seen存储所有符合条件的证书唯一标识(cert_id+serial拼接),自动去重,最后输出数组长度即为唯一证书数 - 注意:根据实际CSV列位置修改
$1/$2/$3,分隔符不是逗号就调整-F参数
方案2:用sort+uniq磁盘去重(适合超大文件、内存不足的场景)
如果证书数量极大,awk内存占用过高,改用磁盘临时文件处理:
zcat *2023-05-11*.gz | awk -F ',' '$1 == "2023-05-11" {print $2","$3}' | sort -u | wc -l
- 逻辑:先提取目标证书标识,用
sort -u去重,再统计行数 - 缺点:速度比awk慢,但内存压力小
是否调用数据源API更合适?
分场景判断:
- 优先选API的情况:
- 数据源API支持直接按
issue_date返回唯一证书统计结果,无需处理原始文件 - 需要定期执行统计,API能提供实时/最新数据,不用维护本地文件备份
- 本地文件体积超大,下载、存储成本高
- 数据源API支持直接按
- 适合本地处理的情况:
- 无可用数据源API,或API不支持该统计需求
- 必须基于本地离线备份文件统计
- API有调用频率、数据量限制,无法满足批量日期统计需求
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

