Board logo

标题: [文本处理] 批处理如何快速去掉大文件重复的行? [打印本页]

作者: nono84223860    时间: 2014-7-2 14:52     标题: 批处理如何快速去掉大文件重复的行?

两个都大于1G的TXT,如何快速去掉重复的行,我内存只有4G,一些工具去除太慢了,快的又要求大内存,有没有好的办法处理,都是英文和数字组合的行来的,没有中文



不用合并,只去重复就可以了
作者: nono84223860    时间: 2014-7-2 15:06

大神,坐等答案。。。。。。。。
作者: CrLf    时间: 2014-7-2 15:08

试试这个:
  1. @findstr /v /x /l /g:1.txt 2.txt>3.txt
复制代码

作者: nono84223860    时间: 2014-7-2 15:57

回复 3# CrLf


    需要处理多久,已经半个小时没动静。。。。。。。。。。。。。
作者: CrLf    时间: 2014-7-2 16:32

文件那么大有什么办法,求快得用 hash 表,那是用空间换时间,非常占内存
作者: CrLf    时间: 2014-7-2 16:57

如果顺序无关紧要,可以这样,需要用到 Gnu sort-7.6.exegawk
  1. @echo off
  2. findstr . a.txt b.txt>临时.txt
  3. sort-7.6.exe -t ':' -k2 -u  临时.txt -o 临时.txt
  4. gawk -F":" "{OUTFILE=$1;sub($1 FS,\"\");print>OUTFILE}" 临时.txt
复制代码

作者: terse    时间: 2014-7-2 17:17

楼主的意思是想得到两个文件合并后并去掉重复行的新文件吗?
作者: DAIC    时间: 2014-7-2 18:27

是需要对比两个文件获取它们之间不同的行?
比如 1.txt
a
b
c

2.txt
a
c

得到3.txt
b


还是需要分别处理两个文件,删除各自文件里面的重复行?
比如1.txt
a
b
a
c

得到3.txt
abc
作者: nono84223860    时间: 2014-7-10 23:41

回复 5# CrLf


    hash表,容易上手吗
作者: nono84223860    时间: 2014-7-10 23:52

回复 6# CrLf


Gnu sort-7.6.exe放到哪里。。
作者: nono84223860    时间: 2014-7-11 00:00

回复 6# CrLf

闪退,不知道 是不是没把那个什么7.6装好

我复到 C:\Windows\System32 文件夹下
作者: wjx515    时间: 2014-7-16 16:08

使用gawk吧 ,速度很快,源文件b.txt,去重复后文件a.txt
gawk "{a[$0]++;if(a[$0]==1)print $0}" b.txt>>a.txt
作者: DAIC    时间: 2014-7-16 17:07

回复 12# wjx515
  1. gawk "!a[$0]++" b.txt > a.txt
复制代码

作者: elec    时间: 2014-7-17 12:56

回复 13# DAIC
    uniq -u a.txt > b.txt
作者: DAIC    时间: 2014-7-17 13:33

回复 14# elec


    使用uniq去重有一个前提:文件是排序的。
作者: elec    时间: 2014-7-17 14:08

回复 15# DAIC


    谢啦~~
  1. sort a.txt | uniq >b.txt
复制代码

作者: DAIC    时间: 2014-7-17 14:45

回复 16# elec


另外一种写法是 sort -u
它可以直接去重




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2