- 论坛徽章:
- 31
|
今天我又重提超大文件去重的事
该论坛让我搜索烂了,尝试搜索各位大神的去重代码(只要我能发现的,都试验过)。
昨晚到今早用了大约6-7个小时运行,采用的是awk '!a[$0]++' 只处理了400多M,我看到结果后立马让我停止运行了
试了一下,这个代码也不理想,感觉内存全吃净了perl -ane 'print if(++$a{$_}==1)' (采用它主要想换个思路试试,也不理想)
(sort -u 简单说也不理想,详情不述)
不啰嗦了,简单说就剩下面最后一招没试验过,原因是我不会用这个代码
下面是一位大神的原话:
-------------------------------------------------------------
用python或者perl搞比较合理,其他shell会多次起新进程,会很慢
cat<<EOF>aa.sh
import time
print(time.strftime('readfile %H:%M:%S'))
raw_lines = file('urfile').readlines()
print(time.strftime('procdata %H:%M:%S'))
un_keys = set()
unlines = []
for l in raw_lines:
if l in un_keys:
continue
un_keys.add(l)
unlines.append(l)
print(time.strftime('writefile %H:%M:%S'))
file('urfile.out','w').writelines(unlines)
EOF
python aa.sh
--------------------------------------------------------------
今请好心的大神耽误你点时间,帮我指导、指导使用方法
用.bat的运行方法,把上面的代码给运行起来
1、在.sh里面都写进去哪些内容?看看我下面的在.sh里面写进去的错在哪里?
#!/bin/sh/cat<<EOF>1.sh
import time
print(time.strftime('readfile %H:%M:%S'))
raw_lines = file('urfile').readlines()
print(time.strftime('procdata %H:%M:%S'))
un_keys = set()
unlines = []
for l in raw_lines:
if l in un_keys:
continue
un_keys.add(l)
unlines.append(l)
print(time.strftime('writefile %H:%M:%S'))
file('urfile.out','w').writelines(unlines)
EOF
python 1.sh
2、在运行.bat时,要写进去哪些内容?看看我下面的在.bat里面写进去的(我只写主要的内容,其它的忽略)错在哪里?
sh 1.sh 8.txt>999.txt
感谢好心的大神,帮帮我吧,你不帮我,我实在是没招了。感谢感谢!
(因为按照代码大神说的原话,这段代码运行速度应该很快)
|
|