返回列表 发帖
要效率高 用2楼的3方啊
纯p处理大文件力不从心啊

TOP

本帖最后由 terse 于 2013-6-13 01:15 编辑

这样呢
修正最后行判断问题
简单的测试 通过
不知是否还有特殊情况
另排除空行的
不知道楼主是否需处理空行
@echo off&setlocal enabledelayedexpansion
sort a.txt | findstr . >temp.tx
set /pstr=<temp.tx
set num=1000000001
(for /f "skip=1 delims=" %%i in (temp.tx) do (     
    if "!str!" neq "%%i" (
       echo;!num:~1!  !str!
       set num=1000000001
    ) else set /a num+=1
      set str=%%i
)
       echo;!num:~1!  !str!
)>sort.txt
sort /r sort.txt >temp.tx
(for /f "tokens=* delims=0" %%i in (temp.tx) do echo;%%i)>sort.txt
del temp.tx
pauseCOPY

TOP

本帖最后由 terse 于 2013-6-13 01:19 编辑

if "!num!" neq "1000000000" echo !num:~1!  !str!
原来这里是考虑尾部为1次的情况
思考一下 应该是错的判断
谢xxpinqz提醒 已修正

TOP

试着用了下 gawk
(@gawk -vt=10000000000 "{ar[$0]++}END{l=asorti(ar,b);for(i=1;i<=l;i++) a[ar[b[i]]+t,b[i]];asorti(a);for(i=l;i>=1;i--) {split(a[i],b,SUBSEP);print b[1]%%t,b[2]}}")<a.txt >sort.txtCOPY

TOP

回复  terse


    这个非常不错,应完美了。
辛苦了
时间缩短了一半

开始的那个好像是特殊符号( ...
rack 发表于 2013-6-14 18:52

好用就好 但行数是有限制的 可以试着加大t
另 b[1]%%t 换为 b[1]-t  不知道效率提高点不 可试下

TOP

这个真不知道
现在不是内存问题
不知道32位机器处理多大
难道64位会有改善吗 我也不知道

TOP

返回列表