中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-31 20:16
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 几十万行记录对比? 查看 1,279 回复 11
楼 主 几十万行记录对比? 发表于 2008-06-25 22:26 ·  中国 香港 环球全域电讯
初级用户
★★
积分 125
发帖 56
注册 2008-02-20 14:01
18年会员
UID 111054
性别 男
状态 离线
有二个*.txt的文档, 每个文档有几十万行记录(文档内的每行记录都以 " ," 为分隔), 可不可以用批处理去把它们不相同一的放到别的文档呢?

[ Last edited by xmi on 2008-6-25 at 10:33 PM ]
2 发表于 2008-06-25 22:47 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线

gawk "ARGIND==1{a}ARGIND>1&&!($0 in a){print $0}" a.txt b.txt >>c.txt


gawk.exe
http://upload.cn-dos.net/img/548.zip

[ Last edited by HAT on 2008-11-4 at 09:38 ]
3 发表于 2008-06-25 22:53 ·  中国 香港 环球全域电讯
初级用户
★★
积分 125
发帖 56
注册 2008-02-20 14:01
18年会员
UID 111054
性别 男
状态 离线
HAT: 请问这个是什么东东来的, 和怎用? ??? 谢谢
4 发表于 2008-06-25 23:07 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线

@echo off
rem 查找2.txt与1.txt中不同的行
findstr /v /g:1.txt 2.txt>3.txt
start 3.txt

ps:就是效率不怎么样

[ Last edited by zw19750516 on 2008-6-25 at 11:11 PM ]
批处理之家新域名:www.bathome.net
5 发表于 2008-06-25 23:19 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
C:\Test>gawk --hlep
Usage: gawk -f progfile file ...
Usage: gawk "program" file ...
POSIX options: GNU long options:
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
-m val
-W compat --compat
-W copyleft --copyleft
-W copyright --copyright
-W dump-variables --dump-variables
-W gen-po --gen-po
-W help --help
-W lint --lint
-W lint-old --lint-old
-W non-decimal-data --non-decimal-data
-W profile --profile
-W posix --posix
-W re-interval --re-interval
-W source=program-text --source=program-text
-W traditional --traditional
-W usage --usage
-W version --version

To report bugs, see node `Bugs' in `gawk.info', which is
section `Reporting Problems and Bugs' in the printed version.


看帮助
6 发表于 2008-06-25 23:23 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
首先请用文本自身的替换功能将1.txt中所有的,替换成空格

@echo off&setlocal enabledelayedexpansion
rem 查找1.txt与2.txt的不同之处
for /f "delims=" %%a in (1.txt) do (
for %%i in (%%a) do (
set "flag="
findstr "%%i" 2.txt>nul&&set flag=A
if not defined flag echo %%i>>3.txt
)
)
start 3.txt

ps:效率更是慢得惊人,前提还要所有的数据中不包含空格。

[ Last edited by zw19750516 on 2008-6-25 at 11:27 PM ]
批处理之家新域名:www.bathome.net
7 发表于 2008-06-25 23:51 ·  中国 香港 环球全域电讯
初级用户
★★
积分 125
发帖 56
注册 2008-02-20 14:01
18年会员
UID 111054
性别 男
状态 离线
Originally posted by HAT at 2008-6-25 11:19 PM:


看帮助


hat兄, 我试过你给我的code
gawk "ARGIND==1{a}ARGIND>1&&!($0 in a){print $0}" a.txt b.txt >>c.txt
, 成功抓到.万分谢意!

但我看完help, 还是不会用, 它内狸没有ARGIND这个的解说?
8 发表于 2008-06-25 23:53 ·  中国 香港 环球全域电讯
初级用户
★★
积分 125
发帖 56
注册 2008-02-20 14:01
18年会员
UID 111054
性别 男
状态 离线
Originally posted by zw19750516 at 2008-6-25 11:07 PM:

@echo off
rem 查找2.txt与1.txt中不同的行
findstr /v /g:1.txt 2.txt>3.txt
start 3.txt

ps:就是效率不怎么样

[ Last edited by zw19750516 on 2008-6-25 at 11:11 PM ]


谢谢zw19750516, 不能完全成功, 结果的输出有两者的不相同, 但也有相同的出现在3.txt......
9 发表于 2008-06-26 00:06 ·  中国 四川 泸州 联通
高级用户
★★★
积分 609
发帖 374
注册 2006-08-02 22:38
19年会员
UID 59720
状态 离线
如果真是几十万行的话,效率确实是个问题.二个文件中如果不相同的愉多,时间会非常
惊人.一般简单的命令不会使你满意.

为了提高效率,一 必须用fc 去掉大量的相同行缩小范围 .二 再在结果中去掉重复行

如果你要求一一对应,不相同的行又多,恐怕你的机器再好,也要运行几分钟或几个小时

或更多时间
10 发表于 2008-06-26 00:19 ·  中国 湖北 武汉 联通
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
几十万行,我想是不是可以导入到数据库中用SQL来的快些?
11 发表于 2008-06-26 00:23 ·  中国 香港 环球全域电讯
初级用户
★★
积分 125
发帖 56
注册 2008-02-20 14:01
18年会员
UID 111054
性别 男
状态 离线
Originally posted by lxmxn at 2008-6-26 12:19 AM:
几十万行,我想是不是可以导入到数据库中用SQL来的快些?


是个txt档来的呀, 可以吗?
12 发表于 2008-06-26 09:53 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
Originally posted by xmi at 2008-6-25 11:51 PM:


hat兄, 我试过你给我的code
gawk "ARGIND==1{a}ARGIND>1&&!($0 in a){print $0}" a.txt b.txt >>c.txt
, 成功抓到.万分谢意!

但我看完h ...

建议到ChinaUnix的Shell版潜水一段时间^_^
论坛跳转: