面试笔试-脚本-1:使用shell脚本输出登录次数最多的用户
原题目:
一个文本类型的文件,里面每行存放一个登陆者的IP(某些行是反复的),写一个shell脚本输出登陆次数最多的用户。
之前刚看到这个题目时,立即没有想到一行直接解决的办法,尽管知道能够先进行排序,可是后面因为对uniq命令的參数不熟悉,所以用了比較背的办法,就是直接编写shell脚本程序来解决问题。
如今如果測试数据例如以下:
111.111.111.111
10.10.10.10
222.222.222.222
111.111.111.111
333.333.333.333
10.10.10.10
111.111.111.111
333.333.333.333
10.10.10.10
222.222.222.222
333.333.333.333
10.10.10.10
111.111.111.111
222.222.222.222
333.333.333.333
10.10.10.10
111.111.111.111
111.111.111.111
333.333.333.333
333.333.333.333
333.333.333.333
222.222.222.222
10.10.10.10
222.222.222.222
111.111.111.111
333.333.333.333
333.333.333.333
111.111.111.111
10.10.10.10
333.333.333.333
222.222.222.222
222.222.222.222
222.222.222.222
222.222.222.222
111.111.111.111
111.111.111.111
333.333.333.333
333.333.333.333
333.333.333.333
333.333.333.333
解决此问题的脚本程序例如以下:
#!/bin/csh
set LINES=`sort $1`
set i=1
set num=`cat $1 | wc -l`
set max=0
set cur=""
set counter=1
set ip=""
while ( $i <= $num )
if ( $LINES[$i] != $cur ) then
if ( $max < $counter ) then
set max=$counter
set ip=$cur
endif
set counter=1
set cur=$LINES[$i]
else
@ counter++
endif
@ i++
end
if ( $max < $counter ) then
set max=$counter
set ip=$cur
endif
echo $ip
首先对IP地址进行排序,排序后找到反复次数最多的那个IP地址就能够了。这个逻辑上还是比較简单的。
可是假设知道能够用uniq命令输出反复的次数的话,这个问题就变得非常easy了:
cat test.txt | sort | uniq -c | sort -r -n -k 1 | head -n 1 | awk '{print $2}'
uniq -c命令将以反复次数作为第一列输出。然后我们使用sort命令的-k指定依照第一列进行排序。-n表示使用数值排序方法而不是默认的字符串排序,-r表示降序输出。
使用head输出第一行,再用awk 输出第二列便是反复次数最多的IP地址
面试笔试-脚本-1:使用shell脚本输出登录次数最多的用户的更多相关文章
- shell脚本实现监控shell脚本的执行流程及变量的值
这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...
- shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
7月11日任务 20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法20.4 shell脚本中的变量 20.1 shell脚本介绍 1.shell脚本语言是linu ...
- IDEA中编写脚本并运行shell脚本
IDEA中编写脚本并运行shell脚本 来自 <https://blog.csdn.net/u012443641/article/details/81295999>
- 【Shell脚本】运行shell脚本文件的几种方法与区别
Shell脚本不同的运行方式会对当前Shell设置或者运行结果有所不同. 假设现在有一个脚本名为display_shell_script_args.sh,其内容如下: #!/home/pyf/bin/ ...
- 【shell脚本】$ 在shell脚本中的使用
shell脚本中 '$' 与不同的符号搭配其表示的意义也会不同 特殊标志符 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数. 例如,第一个参数是$1,第二个 ...
- 脚本、脚本语言、shell脚本
脚本是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等.脚本程序相对一般程序开发来说比较接近自然语言,可 ...
- Linux centosVMware shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量
一. shell脚本介绍 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 shell是系统命令的集合 shell脚 ...
- shell脚本之六:shell脚本的条件测试与比较
六.shell脚本的条件测试与比较 (一)条件表达式的常见语法 1.条件表达式6种写法(if,while) 语法1:test<测试表达式> 语法2:[ <测试表达式>] #中括 ...
- 备份 MySQL 的 shell 脚本(mysqldump版本) shell脚本
#!/bin/bash # 备份 MySQL 的 shell 脚本(mysqldump版本) # 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签) # dbn ...
随机推荐
- selnium远程机上传图片遇到的坑
一般上传图片方法采取方案如下: input标签的file类型上传图片,使用对象的sendkeys+路径方法 使用js注入,再用使用对象的sendkeys+路径方法 使用autolt生成的exe,打开对 ...
- Java与PHPweb开发比较
参考:https://blog.csdn.net/loophome/article/details/83413878
- 洛谷P2613有理数取余
传送门 #include <iostream> #include <cstdio> #include <cstring> #include <algorith ...
- win10编译caffe跑faster-rcnn(cuda7.5)
2017年1月13日 15:46:04 github.com/Microsoft/caffe这版现在不算是BVLC/caffe的官方windows分支:官方windows分支是一个叫willyd的家伙 ...
- Java编程的逻辑 (72) - 显式条件
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- 这可能是最全的禁用win10自动更新了
https://jingyan.baidu.com/article/647f0115e5dbbf7f2148a834.html 本电脑系统版本:Windows 10 专业版 1607 本电脑问题:某天 ...
- 025 Spark中的广播变量原理以及测试(共享变量是spark中第二个抽象)
一:来源 1.说明 为啥要有这个广播变量呢. 一些常亮在Driver中定义,然后Task在Executor上执行. 如果,有多个任务在执行,每个任务需要,就会造成浪费. 二:共享变量的官网 1.官网 ...
- 本机Tomcat启动myeclipse,用Jmeter录制脚本端口冲突解决办法
今天用jmeter 录制脚本与已经启动的Tomcat端口冲突,无法启动工作台的http代理服务器, 如果两个的端口一样,则http代理服务器启动就会提示端口被占用 所以先把Tomcat端口和http代 ...
- Python3 k-邻近算法(KNN)
# -*- coding: utf-8 -*- """ Created on Fri Dec 29 13:13:44 2017 @author: markli " ...
- 【教程】Tomcat 的catalina.out 日志按照自定义日期格式进行切割
本文简单介绍在使用cronolog对tomcat的日志进行自定义日期格式的切割,方便日志的整理和遇到问题日志的排查! 安装cronolog 安装cronolog的方法网上有很多,这里也简单的介绍一下. ...