如何处理千万级Code-Link文本文件,按用户指定阈值筛选链接?
处理大体积Code-Link文本文件,筛选符合次数阈值的链接
需求说明
- 输入文件每行格式为
Code Link(Code与Link用空格分隔) - 支持通过命令行指定阈值N
- 仅输出出现次数 < N的Code对应的所有Link;若某Code出现次数≥N,其所有Link均不输出
高效解决方案(适配1亿行级大文件)
使用awk工具实现,它支持流式处理,内存占用可控,适合处理超大规模文本:
直接命令行运行
awk -v threshold=你的阈值 ' NR == FNR { count[$1]++; next } count[$1] < threshold { print $2 } ' 你的输入文件.txt 你的输入文件.txt
封装为可执行脚本
创建filter_links.sh文件:
#!/bin/bash # 检查参数数量 if [ $# -ne 2 ]; then echo "用法: $0 <阈值> <输入文件路径>" exit 1 fi # 执行筛选逻辑 awk -v threshold="$1" ' NR == FNR { # 第一次遍历:统计每个Code的出现次数 count[$1]++ next } # 第二次遍历:输出符合条件的Link count[$1] < threshold { print $2 } ' "$2" "$2"
给脚本添加执行权限:
chmod +x filter_links.sh
使用示例
针对你提供的示例输入文件,指定阈值为3:
./filter_links.sh 3 input.txt
输出结果与示例一致:
https://test1.com https://test2.com https://testc.com https://test54.com https://testds.com https://testmp.com
原理说明
- 第一次遍历文件:统计每个Code的出现次数,存储在
count数组中 - 第二次遍历文件:检查当前行Code的计数是否小于阈值,满足条件则输出对应的Link
这种方式仅需两次遍历文件,内存占用仅取决于不同Code的数量,即使处理1亿行文件也能高效运行。
内容的提问来源于stack exchange,提问作者nora
相关产品推荐
相关产品推荐

