[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
原帖由 CUer 于 2010-5-5 22:26 发表
你是不是把\t前面的空格丢掉了?


没有去掉空格,完全是复制粘贴过去的
论坛中的引用会再次省略一些符合,所以没了空格

30楼的代码运行后很奇怪,jingjian.txt变成与data.txt一样的文件了

其实我很期待gawk的处理速度,hanyeguxing的代码已经能输出非常接近的结果了,只是速度慢

[ 本帖最后由 jack1505 于 2010-5-5 22:52 编辑 ]

TOP

原帖由 CUer 于 2010-5-5 23:08 发表
type data.txt | gawk -F"[ \t]" "($1!=p+1)||(!($2 in a)){a[$2];print $1,$2}{p=$1}" >jingjian.txt
gawk "NR==FNR{a[$2]=$1}NR>FNR&&($2 in a){print a[$2],$1}" jingjian.txt quhao.txt >result.txt


这么晚还没睡啊!感动ing……

说实话非常感谢CUer和hanyeguxing两位大力的帮助,虽然没有成功,但已经很接近了

麻烦CUer仔细看一下我修改补充的1楼的帖子,应该说的很详细了
最后的结果应该是从小到大连续排列的,并且文件大于500KB

TOP

回复36楼CUer

首先,jingjian.txt和result.txt的行数应该一直,因为result.txt只是替换了区号代码

其次,经我输出测试对比jingjian.txt和data.txt
发现第11行就少了这些数据:
1300025        江苏南京
1300027        山东烟台
1300028        江苏南京

另外,文件大于500KB是有依据的(手机号码从1300000~1899999,除部分地区外,基本每个地区10行,quhao.txt中共有336个地区)
hanyeguxing的代码已经可以正确精简数据了,只是输出顺序有误、速度慢,其结果为633KB

TOP

原帖由 netbenton 于 2010-5-6 00:08 发表
先排序data.txt到data1.txt
再把quhao.txt的内容定义到变量
最后读data1.txt取同区的第一个显示出来
注意:用for /f 命令处理文本时,默认是以空格和[Tab]同时作为字段分隔符的
@echo off&setlocal enabledelaye ...


37楼netbenton版主正解!
输出正确、速度较快,要说完美只差不能显示进度(但也不影响使用)

原始数据data.txt本身就是从小到大连续排列的,不需要再排序了
可以精简sort命令行,提高速度!

非常感谢“批处理之家”的热心高手,这里氛围真好!

TOP

回复44楼

多出的数据应该无用

因为这些数据前后虽然不是相差1,但归属均相同,也可视为连续的数据

比如多出的“1349320”,前面的“1349299”和后面的“1349321”均为相同归属地“北京”

[ 本帖最后由 jack1505 于 2010-5-6 01:14 编辑 ]

TOP

原帖由 CUer 于 2010-5-6 09:56 发表
这跟你顶楼的描述不是冲突了吗?你的要求到底是怎样的呢?



谢谢一如既往的关注,我修改了顶楼的说明,这次应该能说明白

TOP

原帖由 随风 于 2010-5-6 14:29 发表
已帮楼主把数据上传到顶楼


谢谢版主,但是我把data.txt和quhao.txt更新了
可惜权限不够,无法编辑

TOP

回复52楼qzwqzw

感谢了,你的代码测试后,没问题
目前你和37楼的结果正确

42楼和46楼都增加了进度显示,确实速度大大降低
看来你的做法,加上起止的时间较为方便

不过我一楼补充了内容,这个没有实现,详见一楼第2条

[ 本帖最后由 jack1505 于 2010-5-6 18:11 编辑 ]

TOP

回复59楼

这次代码运行没问题,结果也正确
尤其体现出gawk命令的速度优势

谢谢!!!

[ 本帖最后由 jack1505 于 2010-5-6 23:58 编辑 ]

TOP

返回列表