首页 > 试题广场 >

给一个超过100G大小的log file, log中存着IP

[问答题]
给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?
与上题条件相同,如何找到top K的IP?如何直接用Linux系统命令实现?
Hash分桶法:
• 将100G文件分成1000份,将每个IP地址映射到相应文件中:file_id = hash(ip) % 1000
• 在每个文件中分别求出最高频的IP,再合并 Hash分桶法:
• 使用Hash分桶法把数据分发到不同文件
• 各个文件分别统计top K
• 最后Top K汇总
Linux命令,假设top 10:sort log_file | uniq -c | sort -nr k1,1 | head -10
发表于 2015-05-05 14:57:12 回复(2)
sort log|uniq -c|sort -nr|awk '{print$2}'|head -K
发表于 2015-08-28 16:09:59 回复(0)
cat log file| awk '{print $1}' | sort | uniq -c | sort -nr | head -10
发表于 2015-05-18 13:45:39 回复(3)

小根堆

发表于 2019-04-28 08:06:26 回复(0)
我说下思路可好,1.顺序遍历logfile中的IP地址并将IP插入法排序,与此同时给每个IP分配键值(值为IP出现次数),2.求出键值最大数并找到对应的IP
发表于 2015-07-30 10:11:42 回复(0)
cat logfile | sort -r | uniq | awk NR==排行数
先使用sort -r进行次数由多到少的排序,再使用uniq去重,最后使用awk获取结果
发表于 2015-05-21 03:24:08 回复(0)