shell脚本命令编写面试题目

来源:互联网 发布:mac如何创建快捷方式 编辑:程序博客网 时间:2024/05/16 09:10
     一个文本类型的文件,里面每行存放一个登陆者的IP(某些行是重复的),写一个shell脚本输出登陆次数最多的用户。
PS:当时没有做出来,前段时间我再次学习shell脚本的时候想到了一种方法可以求解,但是感觉有点麻烦。在这里请教,各位对于这道题目有什么好的解法?
解法:
以下是我自己想的解法,感觉不完美,拿出来大家给瞧瞧,望多提一些意见!
假设文件中的IP是这样的,ip_input:
219.217.49.14
175.43.4.87
87.48.98.1
59.73.38.25
219.217.50.14
59.92.48.32
219.217.49.14
59.72.38.142
59.73.38.25
219.217.49.14

我们这里一步一步来
1, sort ip_input
首先使用sort命令排序,这样相同的IP地址则可以排在一起,这步我是为了接下来使用命令uniq。因为uniq命令要求是使相邻的行唯一,如果相同行之间存在其它信息,命令不会使结果“唯一”!
输出结果为:
175.43.4.87
219.217.49.14
219.217.49.14
219.217.49.14
219.217.50.14
59.72.38.142
59.73.38.25
59.73.38.25
59.92.48.32
87.48.98.1

2, sort ip_input | uniq -c
这里解释一下uniq -c 选项。它的作用是将重复行去掉并且在每行的前面添加此行重复的次数,下一步则对此结果进行排序则可以找到登录次数最多的IP记录以及登录次数。
输出结果为:
1 175.43.4.87
3 219.217.49.14
1 219.217.50.14
1 59.72.38.142
2 59.73.38.25
1 59.92.48.32
1 87.48.98.1
(在第一个出现次数之前会有很多空格,这是怎么回事呢。。。)

3, sort ip_input | uniq -c | sort -r > tmp
sort命令的默认排序方式是升序,使用 -r 选项逆序排序结果,则出现次数最多的IP则排在了第一行,并将结果保存在tmp文件当中。

4, sed -n '1p' tmp && rm -f tmp
这里的sed -n 用于将文件tmp的第一行做析取操作,此时输出结果为:
3 219.217.49.14
IP 219.217.49.14 出现的次数最多,为 3 次。


PS:在结果中,第一个数字为此IP记录在文件当中出现的次数,这里我本不想将3输出,不过我没有太好的办法解决。当然办法也是有的,不过感觉很笨拙。希望各位多提一些好的解决方案!!!
-》cat ip_input | uniq -c | sort | tail -1 | awk -f '{print $2}'
-》

原创粉丝点击