中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-15 12:42
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行
DOS批处理 & 脚本技术(批处理室) » 如何用批处理按标记分割文件
可打印版本  13,855 / 30
第16楼 willsort 发表于 2005-12-09 15:25
元老会员 发帖 1,512 积分 4,432
Re All:

首先,发布一则启事:

因本人的个人电脑现已搬至别处,与网络隔绝,以作封闭式训练之用,时间至少两周。此段时间内,只有闲暇时间可以在网吧或他人电脑处登录论坛,所以暂时恢复在线收发、离线阅复的上网习惯,因此必然会导致阅读频率降低、回复周期延长以及管理力度减弱,敬请管理层和广大朋友谅解!

tigerpower兄所言之情状,恰有以下三点感受,列述于下:以古语云,知其然而不知其所以然;用如今的观点讲,明白结果未必懂得过程;拿民间的俗话说,听过老虎会吃人的多,见过老虎咋吃人的少。

我于awk,算得上“鼎鼎大名,如雷贯耳;奈何天意弄人,缘悭一识”。这个源出于 Unix 家族的命令行工具,我在学习批处理的过程曾偶有涉猎,却总是未及深入。除却与无奈何兄相似的畏难避险的人之常情外,尚有一份维护批处理血统纯正的崖岸自高在内。但我亦深知,工具的价值,就是在适当的时间、适当的场合被适当的人所使用,一味逃避不过是掩耳盗铃的鸵鸟心态而已。现在,看到无奈何兄比我更早迈出了这一步,欣喜之余不免惭愧。

现已作决定,与其站在门外为看到热闹而喝彩,不如坐于阁内因识出三昧而击节——awk,是时候接触了。
第17楼 yhsean 发表于 2005-12-09 19:28
初级用户 发帖 26 积分 90
得到各位的帮助。太感谢了。请二位推荐 UNIX最 常用的命令

学习之,以解决实际工作诸多问题

向前辈致敬
第18楼 tigerpower 发表于 2005-12-09 20:34
中级用户 发帖 99 积分 377
原来如此,我还以为板主已经见到了偶上次用mawk的解法,呵呵.
本来是想看看各位如何用sed解题,所以就把那张贴给删了
第19楼 willsort 发表于 2005-12-11 21:58
元老会员 发帖 1,512 积分 4,432
Re tigerpower:

我未见到兄的 mawk 的解法,论坛本来就是百花齐放之地,所以还有兄不要藏珍才好。

今天下午,终于有空看了部分中文的 awk 文档,根据自己的初浅认识,仍然回应楼主最初的主题,编写了我的第一个 awk 脚本,因为与无奈何兄脚本尚有一些区别,所以贴上来,以抛砖引玉。

Re 无奈何:

注意到兄的 awk 脚本中是采用一个 temp 变量来做中转的,与print>>相比,字符串变量的连接后再整体输出有可能效率更高一些吗?不知道楼主是否还有心思做一下这方面的测试?因为在我这里不太容易找到规模较大的测试文件。



[ Last edited by willsort on 2005-12-11 at 22:11 ]
第20楼 无奈何 发表于 2005-12-11 23:43
荣誉版主 发帖 356 积分 1,338
to yhsean
关于你想了解“UNIX常用的命令”,我在 7 楼已经提到一个工具包,你可以找来玩玩。
to willsort
兄的学习速度够快的!中间变量的使用肯定会降低效率的,但那时是现学现用的,还不知道close()函数,而直接调用system命令更改文件名又失败,没有办法下只能投机应对,但那是我的第一个 AWK 程序,不打算修改了。最好兄能将你完整的程序贴出来,给本帖问题作个完美的解答吧。
第21楼 无奈何 发表于 2005-12-12 14:19
荣誉版主 发帖 356 积分 1,338
to tigerpower
mawk 的速度和稳定性是很出众的,可遗憾的是资料太少了。
你的代码 gawk 不能通过,我觉得你的这段代码应该是通用的,结果换了低版本的 gawk 通过了,让我狂晕。
第22楼 tigerpower 发表于 2005-12-12 21:24
中级用户 发帖 99 积分 377
Originally posted by 无奈何 at 2005-12-12 14:19:
...结果换了低版本的 gawk 通过了,让我狂晕


哈哈,gawk我到是没试过。
GNU utilities for Win32这个东东我也用,不过其中的join有bug,兄弟们用起来要当心啊!
第23楼 无奈何 发表于 2005-12-12 22:12
荣誉版主 发帖 356 积分 1,338
较新版本的 GAWK 我再也不敢用了,稳定性太差了。今天练习了一段程序,较新的几版 GAWK 居然得到匪夷所思的结果,而旧版和其它版的 AWK 完全正常。同样的脚本得到不同的结果,这比无法运行通过要严重的多,太难以让人接受了。
第24楼 tigerpower 发表于 2005-12-13 08:33
中级用户 发帖 99 积分 377
GNU的旗舰产品是gcc和emacs, 其他软件的代码质量和运行性能值得商榷.
但是在大部分Linux论坛里把Linux和GNU吹得天花乱坠,主观色彩太浓烈了.
平时我也用Linux, 有很多软件我觉得BSD版本的更为优秀
第25楼 Climbing 发表于 2005-12-13 09:20
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
看完这个帖子良久,我的大脑仍然是一片晕。Unix的东西实在搞得太复杂,非我这种简单的大脑可以理解的。
第26楼 yhsean 发表于 2005-12-21 12:54
初级用户 发帖 26 积分 90
Originally posted by 无奈何 at 2005-12-8 13:16:

BEGIN { FS="\n"}
{
if ($1~/^R.*/) {
name = substr($1,length($1)-1)
temp = substr(temp,2)
print temp>name".txt"
temp = ""
}
else {
temp = (temp "\n" $1)
}
}



再次消化 无奈何兄脚本 发现可以这样使其简洁点

$0~/^R.*/? { print temp>substr($1,3)".txt"; temp = "" } : temp = (temp $0 )

[ Last edited by yhsean on 2005-12-22 at 13:29 ]
第27楼 LiveOnLove 发表于 2005-12-21 14:43
中级用户 发帖 161 积分 493 来自 ZHCN
看得有点晕。@_@
第28楼 yhsean 发表于 2005-12-28 19:41
初级用户 发帖 26 积分 90
不好意思,技术是严谨的,纠正我上次的一个错误

{
if ($1 !~ /^R\*/) {
print $0>>"temp"
} else {
close("temp")
system("ren temp "substr($0,3)".txt")
}
}

代码输出比用变量中转一次性输出快,我想应该这样去理解

不用中转变量,处理完就会释放内存中的信息,用中转变量的话,如果中转变量的容量过大的话,速度,直线下降,这在测试一个10M文本内容的出的结果

特此更正,以免误导人!
第29楼 vkill 发表于 2007-02-12 10:29
金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽
用sed的,原理上可以的,只是针对这个专门的



[ Last edited by vkill on 2007-2-12 at 10:42 AM ]
第30楼 jmz573515 发表于 2007-02-12 11:11
银牌会员 发帖 464 积分 1,212
发一个VBS的,揍个热闹


[ Last edited by jmz573515 on 2007-2-11 at 10:35 PM ]
上一页  1 2 3  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023