Shell对比两个文件中的记录有多少重复

问题是这样的:

有两个uid的文件,格式如下:

uid1.txt

12345

23456

....

uid2.txt

12345

34567

....

需要统计这两个文件中相同的uid有多少个。

方法有两个:

1.一个是读入一个文件的一行然后再另一个文件中找,找到就加一,shell大概是这样的(未测试)

count=0
while read line:
do
  grep ${line} uid2.txt
  if [ "$?" -eq 0 ]
  then
      ((count++))
  fi
done < uid1.txt
echo "sum=${count}"

2、1容易想但是太慢,仔细想想可以用类似hash的方式实现,换用awk

awk '
BEGIN{sum=0;}
NR==FNR 
{
  m[$1]=1;
} 
(NR!=FNR && m[$1]==1 && n[$1] != 1) 
{
  n[$1] = 1;
  sum=sum+1;
} 
END{print "sum=",sum;}
' uid1.txt uid2.txt

文件大得话,速度提高不少。同时对于 1 如果有重复uid的话,会出现错误累加,所以在处理前最好先sort | unique一下,对于2 来说因为用n数组标记了所以,不用特殊处理了,速度上又是一个提高。

转载于:https://my.oschina.net/orion/blog/81169

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值