原题目:

一个文本类型的文件,里面每行存放一个登陆者的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脚本输出登录次数最多的用户的更多相关文章

  1. shell脚本实现监控shell脚本的执行流程及变量的值

    这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...

  2. shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量

    7月11日任务 20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法20.4 shell脚本中的变量 20.1 shell脚本介绍 1.shell脚本语言是linu ...

  3. IDEA中编写脚本并运行shell脚本

    IDEA中编写脚本并运行shell脚本     来自 <https://blog.csdn.net/u012443641/article/details/81295999>

  4. 【Shell脚本】运行shell脚本文件的几种方法与区别

    Shell脚本不同的运行方式会对当前Shell设置或者运行结果有所不同. 假设现在有一个脚本名为display_shell_script_args.sh,其内容如下: #!/home/pyf/bin/ ...

  5. 【shell脚本】$ 在shell脚本中的使用

    shell脚本中 '$' 与不同的符号搭配其表示的意义也会不同 特殊标志符 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数. 例如,第一个参数是$1,第二个 ...

  6. 脚本、脚本语言、shell脚本

    脚本是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等.脚本程序相对一般程序开发来说比较接近自然语言,可 ...

  7. Linux centosVMware shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量

    一. shell脚本介绍 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 shell是系统命令的集合 shell脚 ...

  8. shell脚本之六:shell脚本的条件测试与比较

    六.shell脚本的条件测试与比较 (一)条件表达式的常见语法 1.条件表达式6种写法(if,while) 语法1:test<测试表达式> 语法2:[ <测试表达式>] #中括 ...

  9. 备份 MySQL 的 shell 脚本(mysqldump版本) shell脚本

    #!/bin/bash # 备份 MySQL 的 shell 脚本(mysqldump版本) # 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签) # dbn ...

随机推荐

  1. python3之模块urllib

    urllib是python内置的HTTP请求库,无需安装即可使用,它包含了4个模块: request:它是最基本的http请求模块,用来模拟发送请求 error:异常处理模块,如果出现错误可以捕获这些 ...

  2. C++ code:低级编程

    1 C编程 所谓低级编程,是相对于面向对象或基于对象的抽象层次更高的高级编程而言,就是: (1)不用C++STL的资源库,尽量减少内在的创建.调用.分配等的开销: (2)对程序管辖的内存进行直接操作访 ...

  3. VC++一些开发心得与调试技巧

         1.如何在Release状态下进行调试 Project->Setting=>ProjectSetting对话框,选择Release状态.C/C++标签中的Category选Gen ...

  4. GetNumber的实现(Python & Java & Golang)

    TCO2014的编程赢取门票的题目,大致是从一个数组(大小为K),可以选取1-K个数,必须保证这n个数是从1-n,返回所有的选取方法个数. 思路:首先是得到从1开始连续的数,保存每个数的个数.然后通过 ...

  5. Git(一)Git的简介安装

    一.git历史 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代.Linux 内核开源项目有着为数众广的参与者.绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐 ...

  6. vmware工具克隆linux系统步骤及配置

    我们在学习的时候使用vmware创建自己的虚拟机,但是我们有时学习环境需要多台计算机进行操作演示,如果安装创建虚拟机.再在虚拟机上安装操作系统.这样很花费我们的时间,而且还步能保证服务的一直性,这就用 ...

  7. CDM中添加Hive服务时Gateway是什么?

    参考这里http://grokbase.com/t/cloudera/scm-users/12aayq5cyh/what-is-gateway-in-cloudera-manager 实际上Gatew ...

  8. OLAP和OLTP基础知识

    数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing).联机分析处理OLAP(On-Line Analytical Processing).O ...

  9. WebView图片点击查看

    需求:WebView中的图片点击后放大全屏查看 this.setWebViewClient(new WebViewClient() { @Override public boolean shouldO ...

  10. PAT 1066. Root of AVL Tree (25)

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...