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]] } } } } |