中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: sed 命令能否分割TXT文档? 上一主题 | 下一主题
youaoyi
初级用户





积分 154
发帖 67
注册 2007-10-31
状态 离线
『楼 主』:  sed 命令能否分割TXT文档?

请教各位大侠,在txt文本行数未知的情况下, sed能否按照每6万条数据来分割TXT文档呢?


2008-7-11 17:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

这个你应该用split来分隔更方便。


2008-7-13 00:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
youaoyi
初级用户





积分 154
发帖 67
注册 2007-10-31
状态 离线
『第 3 楼』:  

split 只能按照容量分割啊? 这样数据会被断行的 而且也达不到要取60000行的要求.


2008-7-13 01:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  

你怎么就知道不可以呢? split --help


2008-7-13 02:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
youaoyi
初级用户





积分 154
发帖 67
注册 2007-10-31
状态 离线
『第 5 楼』:  

斑竹,几天前就查过了。只有一个按 容量划分的像 -100k 这样,还有一个按照软盘容量划分的 -a 参数,没有别的了啊?


2008-7-14 00:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
youaoyi
初级用户





积分 154
发帖 67
注册 2007-10-31
状态 离线
『第 6 楼』:  

难道是自己用的split 0.92 版本太低?不支持 split -100 a.txt这种格式? 换用下面的代码了,可惜速度不是很快...45秒仅能处理1万条。 @echo off for /f %%i in ('sed -n "$=" a.txt') do set number=%%i :loop set /a num+=1 set /a n=(%num%-1)*100+1 set /a m=100*%num% sed "%n%,%m%w a_%num%.txt" a.txt if %m% LSS %number% goto :loop [ Last edited by youaoyi on 2008-7-14 at 01:53 AM ]


2008-7-14 01:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 7 楼』:  

D:\lxmxn\work\Other>(echo hello,world&echo.this is the second line of the output&echo.cn-dos.net&echo\OK,let's go&echo/Thanks a lot) | split -l 2 D:\lxmxn\work\Other>dir /b x* xaa xab xac D:\lxmxn\work\Other>type x* xaa hello,world this is the second line of the output xab cn-dos.net OK,let's go xac Thanks a lot D:\lxmxn\work\Other>split --version split (textutils) 2.1 Written by Torbjorn Granlund and Richard M. Stallman. Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. D:\lxmxn\work\Other>
我用的win32版本,并非DOS版本,应该是又DOS版本的。 win32 下载地址:www.vkill.net/tools/ ...


2008-7-14 14:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2343
发帖 636
注册 2004-3-6
状态 离线
『第 8 楼』:  

是有个叫 csplit.exe 的 GNU Unix Util 可以这里下载到它的Win32移植版本 unxutils.sourceforge.net/ unxutils.sourceforge.net ... unxutils.sourceforge.net ... 里面也包含了sed/gawk/agrep/egrep/fgrep等常用与非常用的Unix命令移植版


2008-7-14 17:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ngd
中级用户

拟谷盗


积分 312
发帖 108
注册 2007-1-21
状态 离线
『第 9 楼』:  

试一试 awk
gawk "{n=int((NR-1)/100)+1;{print $0>>\"a_\"n\".txt\"}}" a.txt
win32版 gawk下载地址:www.vkill.net/tools/ ... [ Last edited by ngd on 2008-7-16 at 04:42 PM ]




FLOSS
2008-7-15 20:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ngd
中级用户

拟谷盗


积分 312
发帖 108
注册 2007-1-21
状态 离线
『第 10 楼』:  

不借助外部工具 忽略空行
@echo off & setlocal enabledelayedexpansion
set m=1
for /f "delims=" %%a in (a.txt) do (
	if !n! GEQ 100 set n=0 & set/a m+=1
	echo %%a>>a_!m!.txt
	set/a n+=1
)
保留空行
@echo off & setlocal enabledelayedexpansion
set m=1
for /f "delims=" %%a in ('findstr /n .* a.txt') do (
	if !n! GEQ 100 set n=0 & set/a m+=1
	for /f "tokens=1* delims=:" %%i in ("%%a") do echo.%%j>>a_!m!.txt
	set/a n+=1
)


   此帖被 +2 点积分    点击查看详情   
评分人:【 jvive 分数: +2  时间:2008-7-18 09:35




FLOSS
2008-7-15 22:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: