linux天使团群里的筒子问的问题,觉得有必要和新人聊聊,老鸟请无视
统计一个文件中qq号绑定手机的情况
实现方式有很多种,这里通过awk 2维数组来实现
文件内容入如下:
# cat /tmp/q
11235334: 13443253456
11235335: 13443253457
11235336: 13443253458
11235333: 13443253458
11235336: 13443253459
11235334: 13443253452
 
执行之后预期想要的结果:
[root@www bin]# awk -F : -f /tmp/q2.awk /tmp/q
[11235333]
1
 13443253458
[11235334]
2
 13443253456
 13443253452
[11235335]
1
 13443253457
[11235336]
2
 13443253458
 13443253459
awk脚本内容如下:注释如果看不懂就留言吧,有时间我就做答

[root@www bin]# cat /tmp/q2.awk

 

{
        sum[$1] += 1
#设置sum数组用来统计每个qq出现的次数
        tel[$1, NR]=$2
#设置这个2维数组用来存储对应的手机号例如:tel[q号为下标 , NR自己增长]
}
END{
for ( i in sum)
#设置i 在sum里面循环,则i就是qq号码,sum[i] 是每个qq号出现的次数就是绑定了几个手机
        {
                print "["i"]"
                print sum[i]
                for( s in tel)
#s就是tel2维数组的下标,下面通过split函数来处理 
                {
                        qqnum=i
                        split(s, idx, SUBSEP)
#把s切割成多个元素来处理,idx[1] 第一个下标就是qq号,idx[2]第二个下标用来区别同一qq号对应的不同电话号码
#print idx[1]  , idx[2],  tel[idx[1], idx[2]] 大家可以自行打印输出来查看这个2维数组的处理细节
                        if( idx[1]==qqnum )
#如果当前的qq号等于此次sum循环的qq号,则打印对应的电话 
{
                                print tel[idx[1], idx[2]]
                                }
                        }
                }
}