标题: [出题]在不包含重复行的大文件中快速提取指定数量的行
[打印本页]
作者: HAT
时间: 2008-11-22 02:29
标题: [出题]在不包含重复行的大文件中快速提取指定数量的行
假设文本文件a.txt包含5万行互不重复的内容(不考虑特殊字符)
请用纯批处理以最快的速度提取前49990行
输出到b.txt
为了便于比较各种方案所需要的时间,我们以下面的代码产生的文本为评判标准(但实际上行与行之间的内容没有任何规律可循):
@echo off
>a.txt type nul
for /l %%a in (1,1,50000) do (
>>a.txt echo 中国DOS联盟批处理室测试数据%%a
)
作者: huahua0919
时间: 2008-11-22 05:15
一觉醒来,先凑个数(基本都会的)
@echo off &setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
set /a n+=1
if !n! equ 49991 (exit /b 0)
>>b.txt echo %%i
)
作者: HAT
时间: 2008-11-22 07:15
标题: Re 2楼
这个方法确实比较容易想到
不过还有更快的方法:)
作者: kissbill
时间: 2008-11-22 09:50
5万行啊,不知道比沙发的快不
@echo off
more +49990 1.txt>2.txt
echo.>>1.txt
findstr /bevig:2.txt 1.txt>3.txt
pause
[
Last edited by kissbill on 2008-11-22 at 09:52 ]
作者: tireless
时间: 2008-11-22 11:05
标题: 执行速度
Quote: |
C:\>timeit -s 2#if.bat
Version Number: Windows NT 5.1 (Build 2600)
Exit Time: 10:35 pm, Friday, November 21 2008
Elapsed Time: 0:00:28.484
Process Time: 0:00:21.453
C:\>timeit -s 4#findstr.bat
Version Number: Windows NT 5.1 (Build 2600)
Exit Time: 10:36 pm, Friday, November 21 2008
Elapsed Time: 0:00:04.093
Process Time: 0:00:00.046 |
|
(p.s.,
纯批处理允许内部工具吗?)
作者: Saber
时间: 2008-11-22 11:08
用自己写的程序的话算“作弊”了吧……
作者: kissbill
时间: 2008-11-22 11:30
timeit 自己的工具?
作者: HAT
时间: 2008-11-22 12:51
标题: Re 5楼
tireless 兄的代码为何不贴出来?
作者: tireless
时间: 2008-11-22 12:53
Quote: |
Originally posted by HAT at 2008-11-22 12:51 PM:
tireless 兄的代码为何不贴出来? |
|
我也只想到2楼和4楼的方法。5 楼贴出的数据是2楼和4楼的代码执行速度。
作者: Saber
时间: 2008-11-22 14:45
@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
Set/A N=1
FOR /F "skip=49990" %%i IN (a.txt) DO (
Set String!N!=%%i
Set/A N+=1
)
Set/A N-=1
Set Command=FindStr /VC:!String%N%! a.txt
Set/A N-=1
FOR /L %%i IN (!N! -1 1) DO Set Command=!Command!^|FindStr /VC:!String%%i!
Cmd/C !Command!>output.txt
Output.txt
Del Output.txt
[
Last edited by Saber on 2008-11-22 at 16:12 ]
作者: netbenton
时间: 2009-2-25 23:37
标题: 不知道这样速度怎样
@echo off
(for /f "delims=:" %%a in ('findstr /n .* a.txt') do if %%a leq 49990 (echo.%%b) else (goto :quit))>b.txt
:quit
[
Last edited by netbenton on 2009-2-27 at 07:22 ]