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