|
|
发表于 2024-10-30 11:55:00
|
显示全部楼层
本帖最后由 aloha20200628 于 2024-10-30 12:13 编辑
回复 47# 66899981
用45楼提供的实况数据样本data.txt和1.txt做了一个反向测试,验证结果与用24楼代码的运行结论完全一致》即1.txt文件中的匹配数完全覆盖了data.txt文件中每行的第2列字段,因此运行结果是data.txt中的所有行全部被删除...
以下这段反向测试代码的简要说明》先提取data.txt文件中每行头部字段至临时文件0.0,再用gawk.exe对0.0文件去重,结果剩余5904行存为_data.txt(即data.txt文件中不重复的所有第2列字段),再用find.exe与1.txt中的每组数匹配,汇总匹配行总数m和未匹配行总数n,其中m值即data.txt文件中应被删除行数,n值即data.txt文件中应被保留行数。
代码中的 gawk.exe 可从本坛第三方下载 http://bcn.bathome.net/s/tool/index.html?key=gawk
测试代码运行用时约1分钟...
- @echo off &(for /f "tokens=2 delims=|" %%a in (data.txt) do echo,%%a)>0.0
- gawk.exe "{if(++a[$0]==1)print $0}" 0.0>_data.txt
- del/q "0.0" &set/a "m=0,n=0" &for /f "delims=" %%a in (_data.txt) do (
- find /i "|%%a|" "1.txt" && set/a "m+=1" || set/a "n+=1"
- )>nul 2>nul
- echo,应被删除行总数=%m%,应被保留行总数=%n%
- pause&exit/b
复制代码 |
|