[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

回复15楼hanyeguxing

直接运行后,结果.txt不为空
但没有手机号段,只有区号

如:
10
20
21
22
23
24
25
27
28
数字前面只有一个空格

TOP

根据3楼CUer和15楼hanyeguxing的代码
输出结果都相同,均为:空格+区号

此结果相当于将quhao.txt中的归属地删除,并与区号做了调换
并没有对原始数据进行精简和替换

不过还是要谢谢各位热心人!!

TOP

  1. gawk -F"\t" "!($2 in a){a[$2];$3=\"\";print}" yuanshi.txt >jingjian.txt
  2. gawk "NR==FNR{a[$2]=$1}NR>FNR{print a[$2],$1}" jingjian.txt quhao.txt >result.txt
复制代码

TOP

回复 16楼 的帖子

你是直接运行我在15楼的代码,没做任何修改?
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 CUer 于 2010-5-5 14:18 发表
gawk -F"\t" "!($2 in a){a[$2];$3=\"\";print}" yuanshi.txt >jingjian.txt
gawk "NR==FNR{a[$2]=$1}NR>FNR{print a[$2],$1}" jingjian.txt quhao.txt >result.txt


如果这么改,输出都为空了!

各位这么帮我,我都不好意思,惭愧啊~

TOP

原帖由 hanyeguxing 于 2010-5-5 14:20 发表
你是直接运行我在15楼的代码,没做任何修改?


我是直接复制的,未作任何改动,运行后结果如我刚才所说:只有空格+区号

TOP

  1. gawk -F"[ \t]" "!($2 in a){a[$2];$3=\"\";print}" yuanshi.txt >jingjian.txt
  2. gawk "NR==FNR{a[$2]=$1}NR>FNR{print a[$2],$1}" jingjian.txt quhao.txt >result.txt
复制代码

TOP

1,检查data.txt和quhao.txt的文件名是否正确
2,提供两个文本的编码分别是什么?
或者运行下面这个批处理测试:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2" %%a in (data.txt) do set "#data=%%a %%b"
  3. for /f "tokens=1,2" %%a in (quhao.txt) do set "#quhao=%%a %%b"
  4. echo.测试结果:
  5. set #
  6. pause
复制代码
并说明最后显示什么?

[ 本帖最后由 hanyeguxing 于 2010-5-5 14:45 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复22楼CUer和23楼hanyeguxing

回复22楼CUer
修改后的代码和第一次的结果一样

回复23楼hanyeguxing
我把原始数据上传了,本论坛限制太多
http://cachefile25.rayfile.com/z ... 264658513d/data.rar
http://www.rayfile.com/files/a78 ... -935b-0015c55db73d/

TOP

新建一个文本,命令为临时.txt。
然后打开data.txt,全选并复制里面所有内容,在临时.txt里粘贴。
保存后,删除data.txt,并把临时.txt改名为data.txt
然后再运行我在15楼的代码

[ 本帖最后由 hanyeguxing 于 2010-5-5 15:02 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 hanyeguxing 于 2010-5-5 14:58 发表
新建一个文本,命令为临时.txt。
然后打开data.txt,全选并复制里面所有内容,在临时.txt里粘贴。
保存后,删除data.txt,并把临时.txt改名为data.txt
然后再运行我在15楼的代码


谢谢,终于有结果了!
看来是txt格式问题,让诸位辛苦了!深表歉意!
1楼、15楼、18楼的代码均可

新问题1:
1566023 广东佛山 联通 GSM卡
1864353 吉林通化 联通WCDMA 3G卡
1881943 广东广州 移动TD-SCDMA 3G卡
1892413 广东广州 电信天翼  3G卡

以上格式数据有四段数据,最后一段没有删除,造成输出有误

新问题2:
最后结果文件大小不到5KB,显然把所有归属相同的都精简了,每个地区只剩一个号段了
应该将归属地相同的连续号段进行精简
如1331000 至1331019都是上海,保留1331000即可
而往下1351210至1351219还是上海,同理保留1351210

最终结果文件大小应该超过500KB才合理

TOP

按电话区号分组排列手机区段:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2" %%a in (data.txt) do (if not "%%b"=="!b!" set @%%b@%%a=a
  3. echo.正在预处理%%a %%b&set b=%%b)
  4. echo.正在进行后期处理...
  5. for /f "tokens=1,2" %%a in (quhao.txt) do set @%%b#%%a=b
  6. (for /f "tokens=2,3 delims==@#" %%a in ('set @') do if %%b==b (set a=%%a) else echo.%%a !a!)>结果.txt
  7. echo.已经完成&pause
复制代码
如果想加快处理速度,不看到处理过程,则:
  1. @echo off&setlocal enabledelayedexpansion&echo.正在处理中。。。
  2. for /f "tokens=1,2" %%a in (data.txt) do (if not "%%b"=="!b!" set @%%b@%%a=a
  3. set b=%%b)
  4. for /f "tokens=1,2" %%a in (quhao.txt) do set @%%b#%%a=b
  5. (for /f "tokens=2,3 delims==@#" %%a in ('set @') do if %%b==b (set a=%%a) else echo.%%a !a!)>结果.txt
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-5 17:36 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 26楼 的帖子

请把这些信息全部更新到顶楼,以便他人查看。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 hanyeguxing 于 2010-5-5 17:10 发表
按电话区号分组排列手机区段:@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,2" %%a in (data.txt) do (if not "%%b"=="!b!" set @%%b@%%a=a
echo.正在预处理%%a %%b&set b=%%b)
echo.正在进行后期 ...


谢谢,处理花了半个小时

最终结果已经非常接近了!但结果数据不是从小到大连续排列的,因此号段无效
输出的手机号码必须从小到大连续排列,而后面的区号顺序无所谓

如:
1300000 10
1300001 519
1300006 25
1300010 10
1300012 22
1300015 533
1300016 535
1300017 531
1300018 22
1300020 21
1300025 25
1300027 535
1300028 25
1300033 510
1300040 20
1300045 10
1300050 20
1300061 724
1300062 20
1300065 536
1300066 20
1300067 577
1300068 20
1300069 771
1300070 20

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

TOP

  1. gawk -F" \t" "($1!=p+1)||(!($2 in a)){a[$2];print $1,$2}{p=$1}" data.txt >jingjian.txt
  2. gawk "NR==FNR{a[$2]=$1}NR>FNR{print a[$2],$1}" jingjian.txt quhao.txt >result.txt
复制代码

TOP

返回列表