文本1中:
123.com. 3600 IN SOA ns1.dns.com. dns.dns.com. 1419473850 3600 3600 3600 3600
123.com. 3600 IN A 2.2.2.2
123.com. 3600 IN NS ns2.dns.com.
123.com. 3600 IN NS ns1.dns.com.
123.com. 3600 IN SOA ns1.dns.com. dns.dns.com. 1419473850 3600 3600 3600 3600
文本2中
aaaa.com. 3600 IN SOA ns1.youdns.com. dns.youdns.com. 1419473850 3600 3600 3600 3600
aaaa.com. 3600 IN A 11.1.1.1.1
aaaa.com. 3600 IN NS ns2.youdns.com.
aaaa.com. 3600 IN NS ns1.youdns.com.
aaaa.com. 3600 IN SOA ns1.youdns.com. dns.youdns.com. 1419473850 3600 3600 3600 3600
删除每个文本中重复的行
像文本1中
123.com. 3600 IN SOA ns1.dns.com. dns.dns.com. 1419473850 3600 3600 3600 3600
这行重复了去掉重复的一行
文本2中
aaaa.com. 3600 IN SOA ns1.youdns.com. dns.youdns.com. 1419473850 3600 3600 3600 3600
重复了 去掉重复的一行。
我也不知道为什么为有两条SOA记录 真是奇怪
1
holinhot OP 不能说固定删除第几行,这个行不通 因为每个域名的解析记录条数有多有少
|
2
magicianzrh 2015-04-23 11:37:17 +08:00 1
每读入一行 一行文字md5一下作为key,就可以检查了
|
3
ksupertu 2015-04-23 11:38:28 +08:00 1
uniq命令加管道重定向输出文件
|
4
airqj 2015-04-23 11:38:59 +08:00 1
sort -u
|
5
ob 2015-04-23 11:40:40 +08:00
话说搭个hadoop环境是否可行。。
|
6
ob 2015-04-23 11:41:59 +08:00
好吧,没注意这是python节点,请忽略我上面的评论。。
|
7
ipconfiger 2015-04-23 11:43:29 +08:00
@ob 6w行还需要动hadoop?
python读进来,"\n".join(list(set(f.readlines()))) 写回去就好了 |
8
youxiaer 2015-04-23 11:52:45 +08:00
如果不考虑原有顺序就比较简单了。
for i in `find ./ -name "*.txt"`; do sort $i | uniq > $i".bak"; mv $i".bak" $i; done |
9
staticor 2015-04-23 11:53:35 +08:00 1
考虑顺序?
如果不考虑的话是用set() : uniqlines = set(open('/tmp/foo').readlines()) *Nix下sort <file name> | uniq 也有用dict的keys()的: import collections with open(infile, 'rb') as inf, open(outfile, 'wb') as outf: outf.writelines(collections.OrderedDict.fromkeys(inf)) ----------------------------------------- 要保持原顺序, 那就算一行一行读也能操作: for ... if line not in ... : read_it 注: 我只是ST搬运工. |
10
holinhot OP |
11
youxiaer 2015-04-23 12:07:35 +08:00 2
@holinhot 保证顺序也是可以的。
for i in `find ./ -name "*.txt"`; do awk '!a[$0]++' $i > $i".bak"; mv $i".bak" $i; done 用上面的语句就行 |
12
kimmykuang 2015-04-23 14:27:24 +08:00
sort + uniq命令可以搞定的吧?
|
13
GreenJoson 2015-04-23 14:30:09 +08:00
Emeditor 打开10多W万行的文本都不成问题,删除重复行用他的插件~~瞬间的事~~
|
14
atan 2015-04-23 14:32:28 +08:00
sublime text 打开后 Edit>Permute Lines>Unique
|
15
xiaoheshang 2015-04-23 14:50:45 +08:00 1
直接sort |uniq -c |sort -r 解决
|
16
duzhe0 2015-04-23 14:59:44 +08:00
感觉你是想做个diff,把逻辑上相同的行批掉就行了
mv aaaa.com.log aaaa.com.log.backup sed -i 's/^aaaa.com/123.com/;s/ns1.youdns.com. dns.youdns.com/ns1.dns.com. dns.dns.com./' aaaa.com.log diff 123.com.log aaaa.com.log |
17
duzhe0 2015-04-23 15:00:55 +08:00
弄错了, 不是mv, 是cp
|
18
jianghu52 2015-04-23 15:06:22 +08:00
up @GreenJoson 的做法,emeditor打开大文件绝对飞快。
|
19
IssacTseng 2015-04-23 15:10:44 +08:00 2
全部复制到excel,全选6W行数据
数据选项卡-数据工具栏目“删除重复数据” |
20
cbsw 2015-04-23 15:29:12 +08:00
不要拘泥于工具,Python只是一种方便的编程语言而已,sort、unique两个命令干这事最合适了
Do the right thing with the right tool, never try to do everything with one tool. |
22
chengzhoukun 2015-04-23 15:38:45 +08:00 via Android
用SQL也可以吧
|
23
chengzhoukun 2015-04-23 15:38:45 +08:00 via Android
用SQL
|
24
holinhot OP @GreenJoson 不是10w行吧。是6w个txt 每个txt大概10来行
|
25
holinhot OP @chengzhoukun 最终用api入库
|
26
MarioLuisGarcia 2015-04-23 15:43:18 +08:00 1
vim里 :sort u
搞定! |
27
tikazyq 2015-04-23 15:44:50 +08:00
cat <filename> | sort | uniq >> unique.txt
6万行数据不算大,直接unix操作就ok |
28
IssacTseng 2015-04-23 16:20:31 +08:00
@holinhot 临时处理某个文档数据当然可以这样啊,6W行数据对现在的电脑配置来说毫无难度吧。
|
29
Anybfans 2015-04-23 16:33:46 +08:00
为什么大家看不清。。。人家说的是6个txt文件。。。。。。。。。
|
31
touch 2015-04-23 16:57:41 +08:00
既然最终要入库的那不是一条sql语句的事
|
32
raman 2015-04-23 17:14:07 +08:00
这里 sort - u file.txt
|
33
idblife 2015-04-23 17:17:06 +08:00
导入数据库里操作一下
|
34
anexplore 2015-04-23 17:20:18 +08:00
sort -u src.txt > des.txt 就可以搞定了...
|
35
likexian 2015-04-23 17:39:15 +08:00
|
36
iiilii 2015-04-23 17:58:25 +08:00
这么多人都没看懂楼主的问题,6万个txt文件,每个文件10几行。
|
37
incompatible 2015-04-23 18:00:04 +08:00
python里没有 既能保持添加顺序、又能滤重 的数据结构?
类似Java里的LinkedHashSet |
38
staticor 2015-04-23 18:25:35 +08:00
@incompatible ordereddict collections中的
|
39
mucid 2015-04-23 18:48:43 +08:00
cat *.txt | sort | uniq > all.txt
|
41
USCONAN 2015-04-23 19:05:10 +08:00
sort uniq
P.S. 論起標題的嚴謹性和歧義的產生 |
42
leavic 2015-04-23 19:22:02 +08:00
sort|uniq
done |
43
shierji 2015-04-23 19:34:14 +08:00
python cookbook里面有介绍保持顺序的去重方法
|
44
carmark 2015-04-23 19:40:01 +08:00
bloom filter 值得研究
用这个工具处理500g数据都没问题,当然有一定错误率 |
45
GreenJoson 2015-04-23 20:22:51 +08:00
@holinhot 把6W多个合并成一个,然后用emeditor 就行~~
|
46
KoleHank 2015-04-23 21:03:09 +08:00
每一行读出来了往redis里面一塞可行不?
|
47
rrfeng 2015-04-23 21:09:02 +08:00 1
不需要保证输出顺序的话:
awk '!a[$0}++' file1 > file1_output 如果要合并去重的话 awk '!a[$0]++' file1 file2 file3.... fileN > all_output ---------- 一个合格的运维从来不用 sort -u 23333 |
48
LuciferSheng 2015-04-23 22:55:22 +08:00
果然都是程序员,我的方法是导入到 excel - 删除重复项...
|
49
withboost 2015-04-23 22:55:29 +08:00
第一反映是用 excel
|
50
ShunYea 2015-04-23 23:13:44 +08:00
@LuciferSheng 我想到的第一个方法也是这个。
|
51
zts1993 2015-04-23 23:23:54 +08:00 via Android
为什么没人用redis
|
52
Battle 2015-04-24 01:21:05 +08:00 via iPad
那么多用编程解决的都编得定势思维了?用个excel一下子就行
|
53
geeti 2015-04-24 02:52:15 +08:00
cat|uniq > xx不就行了。。。。
|
54
20150517 2015-04-24 03:58:57 +08:00
来说个上T的情况怎么处理的办法,把这个弄进hdfs,开hive,来个row_number函数partition by重复的列,几T数据也帮你处理下来
|
55
ryd994 2015-04-24 07:16:08 +08:00 via Android
|
56
ibolee 2015-04-24 09:31:51 +08:00
导入excle中滤重可能不?备份下试试。
|
57
s51431980 2015-04-24 09:37:57 +08:00
ls *.txt | xargs -I{} bash -c "sort -u {} > {}.bak ; mv {}.bak {}"
|
58
hicdn 2015-04-24 10:18:28 +08:00
awk '!a[$0]++' *.txt > new
|
59
lzg 2015-04-24 10:33:40 +08:00
你这个TXT应该是从SQL中导出的吧。在SQL中就很好做了。
你直接Select distinct再导出TXT。 |