中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 00:52
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]使用sed或gawk按列替换
可打印版本  2,559 / 15
第1楼 hgx126 发表于 2010-08-18 19:14
初级用户 发帖 80 积分 100
[求助]使用sed或gawk按列替换
有三个文件如下:
a.txt


b.txt


c.txt


我想用sed或gawk命令将a.txt文件中第一列(以空格作分隔符)复制到第二列,再将此列数据对应b.txt文件中的第一列,替换成b.txt中的第二列;
同时将将a.txt文件中的第五列中的前三位数据复制到第五列前,再将此列数据(复制后的数据列)对应c.txt文件中的第一列,替换成c.txt中的第二列。
替换后文件内容如下:



求大家相助,写一批处理达到上述结果。要求:使用sed或gawk。
第2楼 hgx126 发表于 2010-08-19 22:25
初级用户 发帖 80 积分 100
是这个不可能实现,还是高人暂时都不在?
第3楼 HAT 发表于 2010-08-20 10:09
版主 发帖 5,017 积分 9,023
不难
可能是这个论坛会gawk的人不多
第4楼 523066680 发表于 2010-08-20 10:22
银牌会员 发帖 1,133 积分 2,362
不难
可能是现在积极的人不多
第5楼 523066680 发表于 2010-08-20 10:48
银牌会员 发帖 1,133 积分 2,362
那些命令我都不会,也没打算学。
还是上批处理了



5411 公司部 10000 1998-11-24 1999-11-24 呆滞 12730101
5416 保宁 15600 2009-11-13 2011-11-12 正常 12540227
5422 城关 130000 2010-6-24 2012-6-23 正常 12510202
5426 沙溪 70000 2010-7-13 2020-7-13 正常 12540214
5427 石子 20000 2010-6-24 2011-6-23 正常 12460001
5428 江南 30000 2008-4-30 2010-4-28 正常 12460001
5429 垭口 18000 2009-8-23 2010-8-22 正常 12460001
5430 裕华 4800 2003-7-11 2005-7-12 呆帐 12810001
5431 田公 30000 2010-3-22 2011-3-21 正常 12310001
5432 治平 9645 2010-2-13 2009-11-14 呆滞 12750201
5433 白塔 148217 2010-5-18 2020-5-18 正常 12540214
5434 彭城 1000 2003-12-16 2004-12-16 呆滞 12760001
5435 双龙 1300 2004-5-18 2004-11-18 呆滞 12710001
5436 七里 180000 2010-6-16 2012-6-15 正常 12510202
5437 柏垭 10000 2009-11-19 2010-11-18 正常 12460001
5438 飞凤 4000 2010-1-7 2011-1-6 正常 12450301
5439 天林 20700 2009-9-28 2010-9-27 正常 12460001


===========================
call 消耗大
换一下了


[ Last edited by 523066680 on 2010-8-20 at 16:04 ]
第6楼 hgx126 发表于 2010-08-20 11:51
初级用户 发帖 80 积分 100
我以前用的也是这个批处理,但速度慢。所以要求用sed和gawk处理。用sed和gawk速度可能只是上面这个批处理的几分甚至几十分之一。
第7楼 523066680 发表于 2010-08-20 13:06
银牌会员 发帖 1,133 积分 2,362
嗖噶。这样的话倒是命令比较方便了呢
其他脚本写起来也不是很简练
坐等
第8楼 freeants001 发表于 2010-08-20 13:16
中级用户 发帖 244 积分 330 来自 湖北
来段JS


修改下提高处理速度

[ Last edited by freeants001 on 2010-8-20 at 16:17 ]
第9楼 hgx126 发表于 2010-08-20 18:05
初级用户 发帖 80 积分 100
感谢freeants001,可惜我看不懂。还在想用sed或gawk。
我是不是有点顽固?呵呵
第10楼 523066680 发表于 2010-08-20 18:30
银牌会员 发帖 1,133 积分 2,362
不会啊,标题就是“使用sed或gawk按列替换”
可惜我不会~ HAT版主快出手吧!
第11楼 freeants001 发表于 2010-08-20 18:53
中级用户 发帖 244 积分 330 来自 湖北
研究下AWK,由于类C特性和正则,所以学习曲比较,下面贴代码。

第12楼 freeants001 发表于 2010-08-20 19:19
中级用户 发帖 244 积分 330 来自 湖北
测试了下速度,当a.txt为9.05M时,JS用时14.500秒,AWK用时仅2.484秒,好快,看来我得认真研究一番了
第13楼 hgx126 发表于 2010-08-22 18:50
初级用户 发帖 80 积分 100
freeants001兄能否把代码帖全?我对gawk使用只有一点点了解。
前面加上gawk,后面加上a.txt执行错误?

[ Last edited by hgx126 on 2010-8-22 at 18:51 ]
第14楼 freeants001 发表于 2010-08-22 20:38
中级用户 发帖 244 积分 330 来自 湖北
11楼代码已贴全,11楼代码保存为配置文件(awk.ini),命令行下执行:
AWK -f awk.ini  a.txt
第15楼 asnahu 发表于 2010-08-30 00:49
初级用户 发帖 53 积分 99
思路来源于freeants001:
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023