标题: [文本处理] [已解决]求助将文本按指定行数均等分割导出的批处理 [打印本页]
作者: hotkean 时间: 2015-10-21 11:57 标题: [已解决]求助将文本按指定行数均等分割导出的批处理
本帖最后由 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是例子,是可变的
先谢谢了~
作者: 依山居 时间: 2015-10-21 17:14
python 练习- import os
-
- f1=open("a.txt","r")
- txt=f1.readlines()
- while "\n" in txt:
- txt.remove("\n")
-
- print(txt[0:4])
- print(len(txt))
- tl=(len(txt))
- cutby=66
- fn=int(tl/cutby)
- tlmod=(tl%cutby)
-
- print("最后一个文件多少行",tlmod)
- if tlmod >0:
- fn=fn+1
- print("几个文件",fn)
-
- input("暂停下下")
-
- for n in range(1,fn+1,1):
- cuttxt=txt[:cutby+1]
- txt=txt[cutby+1:]
- fname="a"+str(n)+".txt"
- f2=open(fname,"w")
-
- f2.writelines(cuttxt)
- f2.close()
-
-
-
复制代码
作者: 依山居 时间: 2015-10-21 17:14
['9x9=81\n', '9x8=72\n', '9x7=63\n', '9x6=54\n']
163
最后一个文件多少行 31
几个文件 3
暂停下下
作者: CrLf 时间: 2015-10-21 17:24
本帖最后由 CrLf 于 2015-10-21 17:29 编辑
- @echo off
- for /f "delims=" %%a in (a.txt) do (
- set /a m=n/200+1,n+=1
- set "str=%%a"
- setlocal enabledelayedexpansion
- echo;!str!>a!m!.txt
- endlocal
- )<a.txt
- pause
复制代码
- @echo off
- for /f %%a in ('find /c /v "" ^<a.txt') do set /a "n=%%a/200+!!(%%a%%200)"
- setlocal enabledelayedexpansion
- (
- for /l %%a in (1 1 %n%) do (
- for /l %%b in (1 1 200) do (
- set "str="
- set /p "str="
- echo;!str!
- )
- )>a%%a.txt
- )<a.txt
- pause
复制代码
作者: CrLf 时间: 2015-10-21 18:06
本帖最后由 CrLf 于 2015-10-21 18:09 编辑
gawk:- gawk "{n=int(NR/40)+1;print $0>n \".txt\"}"
复制代码
有 sed 的话,还可以这样玩- @sed "1~40!d" a.txt | sed "=" | sed -r "N;s/(.*)\n(.*)/\2,+39w\1.txt/g" | sed -f - a.txt
复制代码
作者: 依山居 时间: 2015-10-21 18:37
回复 5# CrLf
看不懂。
作者: pcl_test 时间: 2015-10-21 20:15
vbs- f = "a.txt"
- fn = Left(f,instrrev(f,".")-1)
- ext = Replace(f, fn, "")
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set File= fso.OpenTextFile(f, 1)
- n = InputBox("请输入按指定多少行均等分割文本",,"200")
- If CInt(n) >0 Then
- Do While File.AtEndOfStream <> True
- s = s &File.readLine&vbCrLf
- t = t+1
- If t = CInt(n) Then
- i = i+1
- fso.CreateTextFile(fn&"_"&i&ext, 2).Write s
- s = ""
- t = 0
- End If
- Loop
- Else Wscript.Quit
- End If
- File.Close
- If s <> "" Then fso.CreateTextFile(fn&"_"&(i+1)&ext, 2).Write s
- MsgBox "完成!"
复制代码
作者: CrLf 时间: 2015-10-21 20:56
回复 6# 依山居
gawk "{n=int(NR/40)+1;print $0>n \".txt\"}"
的意思是:- n = int ( NR / 40 ) + 1; print $0 > n \".txt\"
- 编号 = 转为int整数类型 ( 此文件中当前的记录号 / 步伐的间隔 ) + 1 ; 输出 当前行 到 编号.txt
复制代码
作者: /zhqsystem/zhq 时间: 2015-10-21 23:01
将文件拖放到批处理自动转换,如果有特殊字符或内部语言可能会转换失败
- @echo off&setlocal enabledelayedexpansion
- set "total_row=0"&set "number_row=0"&set "number_name=1"
- for /f "delims=" %%i in ('type "%~1"') do (
- set/a "total_row+=1"
- if "!number_row!" leq 199 (
- set/a "number_row+=1"
- (echo,%%i)>>"%~dpn1_!number_name!%~x1"
- )
- if !number_row! equ 200 (
- set/a "number_name+=1"
- set "number_row=0"
- (echo,%%i)>"%~dpn1_!number_name!%~x1"
- )
- )
- echo,数据统计:&echo/&echo/&echo,总行数: %total_row%&echo,转换后文件数: %number_name%
- pause
复制代码
作者: hotkean 时间: 2015-10-24 23:08
回复 4# CrLf
多谢咯~
作者: bailong360 时间: 2015-10-25 09:11
本帖最后由 bailong360 于 2015-10-25 09:17 编辑
- %1@cmd /q /v:on /c %0 :
- split -l 200 a.txt $-
- for /f "delims=" %%i in ('dir /a-d /b $-*') do set /a n+=1&ren %%i !n!.txt
复制代码
第三方split多方便
作者: CrLf 时间: 2015-10-30 15:10
回复 11# bailong360
搜噶
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |