当前位置:
首页
文章
前端
详情

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数组标记了所以,不用特殊处理了,速度上又是一个提高。

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。