shell复习—统计重复ip地址次数
2020-07-19 04:26
681 查看
今天在复习shell的过程中,想起来之前遇到过的一道面试题,如何去除两个文件中的重复数据?
我的第一反应就是用 uniq
cat file1 file2|sort|uniq > resultfile
当然这个回答上来面试官就会继续往下问扩展内容,其实也是日常工作中经常遇到的。
log文件中记录访问信息,里面包含ip地址等信息,想统计每个ip地址访问的次数
(我老板在面试别人的时候也很喜欢面这道题😅😅😅每次我坐在旁边的时候一直都在想,我能不能写出来)
先思考一下最简单的处理情况,log中的格式是固定的,ip地址出现在第三列。
eg:
cat test.log POST 200 192.168.1.1 POST 200 192.168.10.1 POST 200 192.168.1.1 POST 200 192.168.20.1
awk -F" " '{print $3} text.log|sort |uniq -c|sort -n -r|head -n 5
取出ip地址所在的第三列,排序才能去重,-c记录出现次数,sort -r 表示从大到小 -n表示按数值排序,head -n 5 取top5
然后如果这个答上来,还有可能的进一步的扩展就是,当前的日志文件并不是有很好的格式化,不一定都在相同列
这时候怎么办?那就是用正则筛选出来ip,然后后面的操作应该是一样。
ip地址的正则表达式
'[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' test.log|sort |uniq -c|sort -n -r|head -n 5
sed -nr 's/.*[^0-9](([0-9]+\.){3}[0-9]+).*/\1/p' test.txt|sort |uniq -c|sort -n -r|head -n 5
我真的不太会正则,这两个匹配时在网上找的我需要稍后拿电脑测试一下
相关文章推荐
- 有一个2G 大的文件存放着ip地址,请统计出重复次数最多的前10个
- shell统计重复次数
- shell统计重复次数
- 统计重复行出现的次数(重复行消去)shell
- 使用shell脚本统计文件中ip出现的次数
- 使用map来进行票数统计工作,循环输入多个人名,作为key存储到map中,对应的value就是该人获得的票数(即重复输入的次数),当重复输入时,需要对相应的数据进行修改。最红输quit结束循环,打印
- Python基础2 字符串必备操作语法及 面试题:输出字符串中重复的字符,统计字符串中字符出现次数
- oracle查询指定字段 重复记录大于一条的记录,并统计该记录出现的总次数
- shell实现统计浏览次数并将结果保存到文件中
- 用shell统计访问日志里每个ip访问次数
- oracle查询指定字段 重复记录大于一条的记录,并统计该记录出现的总次数
- 用shell统计访问日志里每个ip访问次数【转】
- shell统计文件里面特定字符串出现次数
- java统计字符串中重复字符出现次数的方法
- python重复字符判定 统计每个整数出现次数
- 数组中有重复数据统计并按照次数的由大到小排列出来
- VBS去除字符串的重复项并统计重复字符出现的次数
- 统计 数据中 重复值的次数( 另外,可再对其进行排序,重复次数多的在前边
- 使用SQL语句对重复记录查询、统计重复次数、删除重复数据
- Linux作业(三)-shell统计某文章中出现频率最高的N个单词并排序输出出现次数