[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
根据3楼CUer和15楼hanyeguxing的代码
输出结果都相同,均为:空格+区号

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

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

TOP

回复15楼hanyeguxing

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

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

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:47 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复yangfengoo

改为delims= tab空格
输出依然为空,怎么回事呢?

echo.%time%只是显示时间,不是显示进度(这个功能没有也罢)

TOP

原帖由 CUer 于 2010-5-5 12:55 发表
你的gawk版本是多少?
在gawk上面加一句chcp 936行吗?
在gawk上面加一句chcp 437行吗?


刚才下了新版本,可以输出了,不为空
但结果不对

jingjian.txt内容只有一行
1300000 北京ഠ
结尾是一个黑色方块

result.txt内容只有区号,没有手机号段
10
20
21
22
23
24
25
27
28
298
293
310
311
312
313
314
315
316
317

均为:空格+区号

======================================
是不是Tab和空格没有区分的原因?

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

TOP

你的gawk版本是多少?
在gawk上面加一句chcp 936行吗?
在gawk上面加一句chcp 437行吗?

TOP

原帖由 CUer 于 2010-5-5 12:14 发表
C:\Test>gawk "!($2 in a){a[$2];$3=\"\";print}" yuanshi.txt >jingjian.txt

C:\Test>gawk "NR==FNR{a[$2]=$1}NR>FNR{print a[$2],$1}" jingjian.txt quhao.txt >result.txt

C:\Test>type result.txt
135491 ...


再次感谢!刚才是因为缺少gawk.exe,所以输出为空

但现在运行又有新问题了,提示
Invalid keyboard code specified
Program too big to fit in memory

增加运行smartdrv也不行啊

TOP

注意 delims=
后面是一个tab键和一个空格键  直接复制代码不行,论坛对tab键做了处理

TOP

tab,空格分割兼容
  1. @echo off&setlocal enabledelayedexpansion
  2. echo.%time%
  3. for /f "tokens=1,2" %%a in (quhao.txt) do set #%%b=%%a
  4. (for /f "tokens=1,2 delims=  " %%a in (data.txt) do echo.%%a !#%%b!)>>结果.txt
  5. echo.%time%
  6. pause
复制代码

[ 本帖最后由 yangfengoo 于 2010-5-5 12:37 编辑 ]

TOP

原帖由 jack1505 于 2010-5-5 12:12 发表
三楼的代码没有对数据进行精简吧?
而且两个文件的分隔符不同,tab和空格,这个有影响吗?

我测试后输出结果为空


我直接复制的,第一和二个都是空格分割。

TOP

C:\Test>gawk "!($2 in a){a[$2];$3=\"\";print}" yuanshi.txt >jingjian.txt

C:\Test>gawk "NR==FNR{a[$2]=$1}NR>FNR{print a[$2],$1}" jingjian.txt quhao.txt >result.txt

C:\Test>type result.txt
1354910 753
1354920 769
1354950 735
1354960 736
1354964 731

C:\Test>gawk --version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.

TOP

三楼的代码没有对数据进行精简吧?
而且两个文件的分隔符不同,tab和空格,这个有影响吗?

我测试后输出结果为空

TOP

谢谢二楼高手的相助!
试了一下,输出的jingjian.txt和result.txt都是空的

单独运行第一行代码输出的jingjian.txt也是空的

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2" %%a in (quhao.txt) do set #%%b=%%a
  3. (for /f "tokens=1,2" %%a in (data.txt) do echo.%%a !#%%b!)>>结果.txt
复制代码
9M测试不到1分钟

TOP

  1. gawk "!($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

返回列表