我有一个有n行的文件.(n超过1亿)
我想输出一个只有10行中的1行的文件,我不能将文件分成十部分而只保留一部分,因为它必须更随机一点.后来我必须做一个统计分析,我不能在数据中产生强烈的偏见.
我正在考虑读取文件和每个记录,如果记录号mod 10然后输出它.
限制是:
它是一台Windows(可能是硬化的)计算机,可能是XP Vista或Windows Server 2003.
没有可用的开发工具
没有网络,USB,CD-ROM.不读外部通讯.
因此,我在考虑Windows批处理文件(我不能假设powershell,并且可能已删除了vbscript).目前正在查看FOR/F命令.我仍然不是专家,我不知道如何实现这一目标.
谢谢保罗的回答.我重新格式化(使用Hosam帮助)将其放入批处理文件中的答案:
@echo off setlocal findstr/N . inputFile| findstr ^[0-9]*0: >temporaryFile FOR /F "tokens=1,* delims=: " %%i in (temporaryfile) do echo %%j > outputFile
感谢quux和Pax提供类似的替代解决方案.然而,在对较大文件进行快速测试后,Paul的答案大约快了8倍.我想评估(在SET中)有点慢,即使逻辑看起来很棒.
好的,我想我已经破解了它:
findstr/N . path-to-log-file | findstr ^[0-9]*0:
(使用findstr将行号添加到行的开头,然后再次仅打印行号以零结尾的行)
因此,您将获得10行中的一行,但每行前面加上亚麻和冒号
如果我能想到一种使用命令行工具的方法,只能解决这个问题,我将编辑这个答案:)
删除行号和冒号
FOR /F "tokens=1,2* delims=: " %i in (file-with-linenumbers) do echo %j
保罗.