如何统计目录下CSV文件中关联记录的唯一时间戳数量
解决CSV跨文件重复时间戳的统计问题
你的核心问题是之前的命令处理的是整行而非单独的timestamp字段——即使两个记录的timestamp相同,只要id不同,整行内容就不一样,uniq无法识别为重复项;另外你的正则表达式写法有误,2022-11-*中的*会匹配0个或多个-,不是匹配日期后续内容的正确写法。
正确的处理步骤
要统计唯一timestamp的总数,必须先提取出每个记录的timestamp字段,再过滤、去重、统计:
- 提取timestamp字段:假设CSV用逗号分隔,timestamp是第二列(如果是其他列,把
-f2改成对应列数,比如第三列写-f3):cut -d',' -f2 2022-* - 过滤目标日期:精准匹配以
2022-11-开头的时间戳(避免匹配行内其他位置的日期):grep "^2022-11-" - 去重并统计:先排序(
uniq只能处理相邻重复项),再去重,最后统计行数:sort | uniq | wc -l
组合命令
把上面的步骤合并成一条命令:
cut -d',' -f2 2022-* | grep "^2022-11-" | sort | uniq | wc -l
特殊情况处理
- 如果CSV文件第一行是表头(比如包含
timestamp字样),需要跳过表头,加入sed '1d':cut -d',' -f2 2022-* | sed '1d' | grep "^2022-11-" | sort | uniq | wc -l - 如果CSV用制表符分隔,把
-d','改成-d$'\t':cut -d$'\t' -f2 2022-* | grep "^2022-11-" | sort | uniq | wc -l
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

