免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2143 | 回复: 4
打印 上一主题 下一主题

如何统计两个文件的不同? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-20 11:31 |只看该作者 |倒序浏览
两个文件fileA,fileB,存了一堆名字,格式如下:
jack wong
张三
李四


需要计算只包含在某个文件的名字数量。如统计只在B中的名字数量,我的代码如下


  1. #排序
  2. sort fileA > fileA.sort
  3. sort fileB > fileB.sort

  4. #计算A和B的数量
  5. awk 'if(!u[$0]){u[$0]+=1;uniqUser+=1} END{print uniqUser, FNR}' fileA.sort
  6. awk 'if(!u[$0]){u[$0]+=1;uniqUser+=1} END{print uniqUser, FNR}' fileB.sort

  7. #计算只在B中的数量
  8. comm -13 fileA.sort fileB.sort > uniq.sort
  9. awk 'if(!u[$0]){u[$0]+=1;uniqUser+=1} END{print uniqUser, FNR}' uniq.sort

  10. #删除临时文件
  11. rm -f fileA.sort
  12. rm -f fileB.sort
  13. rm -f uniq.sort
复制代码


(1)觉得写得太复杂了,有简单的方法吗?
(2)名字前后可能包含空格,awk如何做trim操作呢?
(3)文件比较大,每个里面都有几百万记录,效率太低了。。。

请大家指点一下。我学习学习

论坛徽章:
0
2 [报告]
发表于 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还做了排序,工作多些)

论坛徽章:
0
3 [报告]
发表于 2008-05-20 21:29 |只看该作者

  1. awk 'NR==FNR {a[$0]++};NR>FNR&&!a[$0] {b[$0]++};END {for (i in b) {print i}' a.file b.file
复制代码

论坛徽章:
0
4 [报告]
发表于 2008-05-20 22:49 |只看该作者
用MD5算2个文件的值

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2008-05-21 01:05 |只看该作者

回复 #4 youyu_buzai 的帖子

大文件的话忒慢了吧
PS: 还是举个实例好些

[ 本帖最后由 寂寞烈火 于 2008-5-21 01:06 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP