中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 几十万行记录对比? 上一主题 | 下一主题
xmi
初级用户





积分 125
发帖 56
注册 2008-2-20
状态 离线
『楼 主』:  几十万行记录对比?

有二个*.txt的文档, 每个文档有几十万行记录(文档内的每行记录都以 " ," 为分隔), 可不可以用批处理去把它们不相同一的放到别的文档呢?

[ Last edited by xmi on 2008-6-25 at 10:33 PM ]

2008-6-25 22:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  


gawk "ARGIND==1{a[$0]}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 ]



2008-6-25 22:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xmi
初级用户





积分 125
发帖 56
注册 2008-2-20
状态 离线
『第 3 楼』:  

HAT: 请问这个是什么东东来的, 和怎用? ??? 谢谢

2008-6-25 22:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 4 楼』:  


@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
2008-6-25 23:07
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  



  Quote:
C:\Test>gawk --hlep
Usage: gawk [POSIX or GNU style options] -f progfile [--] file ...
Usage: gawk [POSIX or GNU style options] [--] "program" file ...
POSIX options:          GNU long options:
        -f progfile             --file=progfile
        -F fs                   --field-separator=fs
        -v var=val              --assign=var=val
        -m[fr] val
        -W compat               --compat
        -W copyleft             --copyleft
        -W copyright            --copyright
        -W dump-variables[=file]        --dump-variables[=file]
        -W gen-po               --gen-po
        -W help                 --help
        -W lint[=fatal]         --lint[=fatal]
        -W lint-old             --lint-old
        -W non-decimal-data     --non-decimal-data
        -W profile[=file]       --profile[=file]
        -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.

看帮助



2008-6-25 23:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 6 楼』:  

首先请用文本自身的替换功能将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
2008-6-25 23:23
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
xmi
初级用户





积分 125
发帖 56
注册 2008-2-20
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by HAT at 2008-6-25 11:19 PM:


看帮助

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

但我看完help, 还是不会用, 它内狸没有ARGIND这个的解说?

2008-6-25 23:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
xmi
初级用户





积分 125
发帖 56
注册 2008-2-20
状态 离线
『第 8 楼』:  



  Quote:
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......

2008-6-25 23:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 9 楼』:  

如果真是几十万行的话,效率确实是个问题.二个文件中如果不相同的愉多,时间会非常
惊人.一般简单的命令不会使你满意.

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

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

或更多时间

2008-6-26 00:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 10 楼』:  

几十万行,我想是不是可以导入到数据库中用SQL来的快些?

2008-6-26 00:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xmi
初级用户





积分 125
发帖 56
注册 2008-2-20
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by lxmxn at 2008-6-26 12:19 AM:
几十万行,我想是不是可以导入到数据库中用SQL来的快些?

是个txt档来的呀, 可以吗?

2008-6-26 00:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by xmi at 2008-6-25 11:51 PM:


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

但我看完h ...

建议到ChinaUnix的Shell版潜水一段时间^_^



2008-6-26 09:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: