[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]求助将文本按指定行数均等分割导出的批处理

本帖最后由 hotkean 于 2015-10-30 10:36 编辑

我现在有一个文本a.txt,一共有800行网址,现在要将其每200行作为一份导出,分别导出为a1.txt a2.txt a3.txt a4.txt,很菜的问题求好心人批处理代码。
   另外如果不能整除,如一共有900行,还是200行一份,导出a1.txt~a4.txt四个文件后,a5.txt里分配100行,一起也求下代码~
   当然这里的200是例子,是可变的
   先谢谢了~

python 练习
  1. import os
  2. f1=open("a.txt","r")
  3. txt=f1.readlines()
  4. while "\n" in txt:
  5.     txt.remove("\n")
  6.    
  7. print(txt[0:4])
  8. print(len(txt))
  9. tl=(len(txt))
  10. cutby=66
  11. fn=int(tl/cutby)
  12. tlmod=(tl%cutby)
  13. print("最后一个文件多少行",tlmod)
  14. if tlmod >0:
  15.     fn=fn+1
  16. print("几个文件",fn)
  17. input("暂停下下")
  18. for n in range(1,fn+1,1):
  19.     cuttxt=txt[:cutby+1]
  20.     txt=txt[cutby+1:]
  21.     fname="a"+str(n)+".txt"
  22.     f2=open(fname,"w")
  23.    
  24.     f2.writelines(cuttxt)
  25.     f2.close()
  26.    
  27.    
  28.    
复制代码

TOP

['9x9=81\n', '9x8=72\n', '9x7=63\n', '9x6=54\n']
163
最后一个文件多少行 31
几个文件 3
暂停下下

TOP

本帖最后由 CrLf 于 2015-10-21 17:29 编辑
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.   set /a m=n/200+1,n+=1
  4.   set "str=%%a"
  5.   setlocal enabledelayedexpansion
  6.   echo;!str!>a!m!.txt
  7.   endlocal
  8. )<a.txt
  9. pause
复制代码
  1. @echo off
  2. for /f %%a in ('find /c /v "" ^<a.txt') do set /a "n=%%a/200+!!(%%a%%200)"
  3. setlocal enabledelayedexpansion
  4. (
  5.   for /l %%a in (1 1 %n%) do (
  6.     for /l %%b in (1 1 200) do (
  7.       set "str="
  8.       set /p "str="
  9.       echo;!str!
  10.     )
  11.   )>a%%a.txt
  12. )<a.txt
  13. pause
复制代码

TOP

本帖最后由 CrLf 于 2015-10-21 18:09 编辑

gawk:
  1. gawk "{n=int(NR/40)+1;print $0>n \".txt\"}"
复制代码
有 sed 的话,还可以这样玩
  1. @sed "1~40!d" a.txt | sed "=" | sed -r "N;s/(.*)\n(.*)/\2,+39w\1.txt/g" | sed -f - a.txt
复制代码
1

评分人数

    • bailong360: 最近流行写丧心病狂的代码么技术 + 1

TOP

回复 5# CrLf


    看不懂。

TOP

vbs
  1. f = "a.txt"
  2. fn = Left(f,instrrev(f,".")-1)
  3. ext = Replace(f, fn, "")
  4. Set fso = CreateObject("Scripting.FileSystemObject")
  5. Set File= fso.OpenTextFile(f, 1)
  6. n = InputBox("请输入按指定多少行均等分割文本",,"200")
  7. If CInt(n) >0 Then
  8.     Do While File.AtEndOfStream <> True
  9.         s = s &File.readLine&vbCrLf
  10.         t = t+1
  11.         If t = CInt(n) Then
  12.             i = i+1
  13.             fso.CreateTextFile(fn&"_"&i&ext, 2).Write s
  14.             s = ""
  15.             t = 0
  16.         End If
  17.     Loop
  18. Else Wscript.Quit
  19. End If
  20. File.Close
  21. If s <> "" Then fso.CreateTextFile(fn&"_"&(i+1)&ext, 2).Write s
  22. MsgBox "完成!"
复制代码

TOP

回复 6# 依山居


    gawk "{n=int(NR/40)+1;print $0>n \".txt\"}"
的意思是:
  1. n   =  int           ( NR               /       40 ) +  1;  print $0     >  n \".txt\"
  2. 编号 = 转为int整数类型 ( 此文件中当前的记录号 / 步伐的间隔 ) + 1 ; 输出  当前行  到 编号.txt
复制代码
1

评分人数

TOP

将文件拖放到批处理自动转换,如果有特殊字符或内部语言可能会转换失败
  1. @echo off&setlocal enabledelayedexpansion
  2. set "total_row=0"&set "number_row=0"&set "number_name=1"
  3. for /f "delims=" %%i in ('type "%~1"') do (
  4. set/a "total_row+=1"
  5. if "!number_row!" leq 199 (
  6.   set/a "number_row+=1"
  7.   (echo,%%i)>>"%~dpn1_!number_name!%~x1"
  8. )
  9. if !number_row! equ 200 (
  10.   set/a "number_name+=1"
  11.   set "number_row=0"
  12.   (echo,%%i)>"%~dpn1_!number_name!%~x1"
  13. )
  14. )
  15. echo,数据统计:&echo/&echo/&echo,总行数: %total_row%&echo,转换后文件数: %number_name%
  16. pause
复制代码
这么好的论坛你上哪找,运行测试环境为6.1.7601-64
注:请遵守互联网信息安全,勿用于非法用途

TOP

回复 4# CrLf

多谢咯~

TOP

本帖最后由 bailong360 于 2015-10-25 09:17 编辑
  1. %1@cmd /q /v:on /c %0 :
  2. split -l 200 a.txt $-
  3. for /f "delims=" %%i in ('dir /a-d /b $-*') do set /a n+=1&ren %%i !n!.txt
复制代码
第三方split多方便
1

评分人数

TOP

回复 11# bailong360


    搜噶

TOP

返回列表