- 论坛徽章:
- 0
|
本帖最后由 zbs168 于 2018-03-23 17:29 编辑
回复 7# wh7211
谢谢优化,但是有个问题Mar 20 09:24:39 LOG xxxx: GOT INFO: ip 192.168.1.91 to client with mac 00:01:00:27:b1:a7 ab = 12 valid 90 ms
例如这行中的mac:00:01:00:27:b1:a7,实际为可变长度,可能是6位,也可能是12位,也可能是任意位
我用
- awk '$0!~/^$/{y=strftime("%Y",systime());m=$1=="Jan"?1:$1=="Feb"?2:$1=="Mar"?3:$1=="Apr"?4:$1=="May"?5:$1=="Jun"?6:$1=="Jul"?7:$1=="Aug"?8:$1=="Sep"?9:$1=="Oct"?10:$1=="Nov"?11:$1=="Dec"?12:"";split($3,a,":");b=mktime(""y" "m" "$2" "a[1]" "a[2]" "a[3]"");c=$18=="valid"?$18" "$19+b:$18;d[$14]=b" "$9" "$14" "c}END{PROCINFO["sorted_in"]="@val_num_asc";for(i in d){print d[i]}}' 1
复制代码
得到的数据是:
1521508400 192.168.1.19 00:01:00:e1:78:38 valid 1521508520
1521509079 192.168.1.91 00:01:00:27:b1:a7 valid 1521509169
1521509738 192.168.1.12 00:01:00:f5:41:ba valid 1521509958
1521509797 192.168.1.11 00:01:00:f5:41:bb bad
同时,新问题是:
我每次处理完后会把结果用>>汇总到文件a.txt里面,每隔5分钟跑一次,我想每次汇总完后对a.txt进行二次过滤,过滤要求是:
1.根据mac进行排序,相同mac重复的数据只保留日期最近的一条数据,不同mac无重复的数据保留
2.获取当前的unix时间戳
3.将最后一列的数值与第2步得到的unix时间戳对比,如果小于当前unix时间戳,就抛弃该行,表示过期
4.最后还是按照第一列进行升序排列 |
|