file
12/Feb/2012:23:59:48 /jy3/main.jsp user1
12/Feb/2012:23:59:48 /js4/main.jsp user2
12/Feb/2012:23:59:51 /js4/main.jsp user3
12/Feb/2012:23:59:51 /jy3/main.jsp user3
12/Feb/2012:23:59:53 /js4/main.jsp user4
要求找出 /jy3/main.jsp 和 /js4/main.jsp 中重叠的 user 所在的行:
处理方法:
awk '{a[$NF]==""?a[$NF]=$0:a[$NF]=a[$NF]"\n"$0}END{for(i in a)if(a[i]~/js4/&&a[i]~/jy3/)print a[i]}' file
解析:利用最后一列作为数组的下标,如果数组的内容为空的话,就说明他是第一次出现,第一次出现的话直接将整个字符串赋值给数组即可,如果不是第一次出现的话,他的值就不是空,那就将数组值累加起来,并且回车换行,最后进行条件的匹配输出。