基于Awk检测含相同/相近数值长序列的文件并优化评分方案问询
需求:检测含相近数值长序列的文本文件并生成评分
核心需求
- 处理数千个每行存储一个整数的文本文件,识别其中包含数十个相同/差值约为5的相近数值长序列的文件
- 为文件生成0%-100%的评分:
- 0%:所有数值完全相同
- 低分:存在大量相同/相近数值的长序列
- 100%:数值完全随机
- 评分无需严格精准,只需能区分两类序列即可,倾向概率性评估而非严格阈值
文件格式与示例
实际文件中每个数值单独占一行,以下示例为便于阅读用空格分隔:
# 示例1:全相同数值 → 0% 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 # 示例2:存在5-7的长相近序列 → 远低于50% 2 9 21 17 12 2 2 5 4 6 5 6 6 6 7 6 7 5 3 6 6 5 7 7 6 6 5 6 7 6 7 5 7 6 6 6 5 6 6 5 6 78 # 示例3:存在32-35的相近序列(有中断)→ 低于50% 20 15 1 2 1 3 2 1 3 18 20 6 12 35 32 35 34 34 34 34 33 34 33 36 44 68 33 32 34 33 53 87 # 示例4:无相近长序列 → 接近100% 12 28 38 44 22 38 16 14 23 45 17 39 29 2 5 15 11 7 2 8 2 14 10 1 14 3 2 2 9 10 4 22 7 1
现有方案问题
当前使用基于百分比标准差的Awk脚本,无法有效识别目标特征,手动检查低评分文件效果不佳:
{ a += $1; b[++i] = $1 } END { m = a / NR; for (i in b) { d += (b[i] - m) ^ 2 } print int(sqrt(d / NR) * 100 / m + 0.5) }
优化需求
寻求更优的Awk实现方案,精准检测包含相同/相近数值长序列的文本文件,并生成符合要求的评分。
背景补充
每个文本文件代表一个用户会话,数值对应该分钟内的请求次数;相同/相近数值的长序列通常是机器人而非人类用户的特征。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

