Chinaunix
标题:
如何统计两个文件的不同?
[打印本页]
作者:
jopener
时间:
2008-05-20 11:31
标题:
如何统计两个文件的不同?
两个文件fileA,fileB,存了一堆名字,格式如下:
jack wong
张三
李四
需要计算只包含在某个文件的名字数量。如统计只在B中的名字数量,我的代码如下
#排序
sort fileA > fileA.sort
sort fileB > fileB.sort
#计算A和B的数量
awk 'if(!u[$0]){u[$0]+=1;uniqUser+=1} END{print uniqUser, FNR}' fileA.sort
awk 'if(!u[$0]){u[$0]+=1;uniqUser+=1} END{print uniqUser, FNR}' fileB.sort
#计算只在B中的数量
comm -13 fileA.sort fileB.sort > uniq.sort
awk 'if(!u[$0]){u[$0]+=1;uniqUser+=1} END{print uniqUser, FNR}' uniq.sort
#删除临时文件
rm -f fileA.sort
rm -f fileB.sort
rm -f uniq.sort
复制代码
(1)觉得写得太复杂了,有简单的方法吗?
(2)名字前后可能包含空格,awk如何做trim操作呢?
(3)文件比较大,每个里面都有几百万记录,效率太低了。。。
请大家指点一下。我学习学习
作者:
dolphinlater
时间:
2008-05-20 21:21
标题:
回复 #1 jopener 的帖子
稍微简单一点:
sort -u fileA > fileA.sort #排序并合并相同行(合并是关键)
sort -u fileB > fileB.sort
diff fileA.sort fileB.sort | awk '/</{onlyA++}/>/{onlyB++}END{print "only in A:",onlyA "\nonly in B:",onlyB}'
另请问下高手:用awk遍历一个大文件(出现过的名字打印一次)和sort -u哪个快些?(sort还做了排序,工作多些)
作者:
jinl
时间:
2008-05-20 21:29
awk 'NR==FNR {a[$0]++};NR>FNR&&!a[$0] {b[$0]++};END {for (i in b) {print i}' a.file b.file
复制代码
作者:
youyu_buzai
时间:
2008-05-20 22:49
用MD5算2个文件的值
作者:
寂寞烈火
时间:
2008-05-21 01:05
标题:
回复 #4 youyu_buzai 的帖子
大文件的话忒慢了吧
PS: 还是举个实例好些
[
本帖最后由 寂寞烈火 于 2008-5-21 01:06 编辑
]
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2