面试笔试-脚本-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命令输出重复的次数的话,这个问题就变得很简单了:

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地址

时间: 2024-09-29 16:43:51

面试笔试-脚本-1:使用shell脚本输出登录次数最多的用户的相关文章

shell脚本介绍,shell脚本结构和执行方式,date命令的用法,shell脚本中的变量简介

笔记内容: 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量 笔记日期:2017-11-21 20.1 shell脚本介绍 Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的.但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令

第10章:构建基本的脚本_《shell脚本大全 第二版》

一.执行 1.并行执行命令,多个命令用分号隔开 [[email protected] network-scripts]# date;who Tue May 3 14:55:44 CST 2016 root tty1 2016-05-03 01:40 root pts/0 2016-05-03 13:41 (192.168.78.1) 2.Shell脚本的第一行表示需要bash去执行 #! /bin/bash 3.Shell脚本按照顺序执行 4.单点操作符代表将要执行shell脚本 [[email

什么是Shell?Shell脚本是什么?shell脚本执行过程?学习Shell编程必看!

1.什么是Shell? 首先请看图----自动略过各位都是新手(CaiJi) 聪明的你如图所得: Shell=命令解释器它的作用是执行并解释用户输入的命令及脚本,用户键入一条命令,Shell就执行并解释一条.键入命令,就可以立即得到回应的对话方式,被称之为为交互式.Shell它存在于操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户,当我们输入系统用户名和密码,登录到Linux后的所有操作都是由Shell解释并执行的. 所以

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

Shell脚本介绍 shell是一种脚本语言 blog.lishiming.net(阿铭的博客,可以去里面找shell习题)可以使用逻辑判断.循环等语法可以自定义函数,减少重复代码shell是系统命令的集合shell脚本可以实现自动化运维,能大大增加我们的运维效率 Shell脚本结构和执行 开头需要加#!/bin/bash 以#开头的行作为解释说明 脚本的名字以.sh结尾,用于区分这是一个shell脚本写一个简简单的脚本#!/bin/bash#Linletao#2018-5-29echo llt

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

一.shell脚本介绍 shell是一种脚本语言  aming_linux  blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 定义函数的目的:为了简化,为了减少重复的代码. shell是系统命令的集合 shell脚本可以实现自动化运维,能大大增加我们的运维效率 二.shell脚本结构和执行 脚本示例: #!/bin/bash echo "123" w ls 开头需要加#!/bin/bash,这个脚本在当前机器执行能识别里面的命令,换一台机器也许就不能

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

一.shell是什么 shell是一种脚本语言 aming_linux blog.lishiming.net 可以使用逻辑判断.循环等语法 可以自定义函数 shell是系统命令的集合 shell脚本可以实现自动化运维,能大大增加我们的运维效率 二.shell脚本结构和执行方法 开头需要加#!/bin/bash 以#开头的行作为解释说明 脚本的名字以.sh结尾,用于区分这是一个shell脚本 执行方法有两种 chmod +x 1.sh; ./1.sh bash 1.sh 查看脚本执行过程 bash

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

shell脚本介绍 shell脚本结构和执行 开头需要加#!/bin/bash 因为有了#!/bin/bash文件头所以需要给01.sh文件执行权限 [[email protected] shell]# chmod a+x 01.sh 以#开头的行作为解释说明 脚本的名字以.sh结尾,用于区分这是一个shell脚本 执行方法有两种chmod +x 1.sh; ./1.shbash 1.sh 查看脚本执行过程 bash -x 1.sh 查看脚本是否语法错误 bash -n 1.sh date命令用

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

IEDA中的bashsupport插件支持在IDEA中编写shell脚本文件,有友好的代码格式,支持自动补全,检查错误,并且配置完之后,还可以在IEDA中直接运行shell脚本.下面将一步一步演示插件的安装和配置. 打开IEDA,安装bashsupport插件 安装完之后,保持插件选中的状态,如下图所示,然后重启IDEA. 安装git软件.https://www.git-scm.com/download/ 基本上直接安装全部默认就可以,不过要记住自己的安装目录. IDEA配置 如下图所示,编辑器

SDUT OJ 2892 A (字典树问题-输出出现次数最多的字符串的出现次数,60ms卡时间,指针+最后运行完释放内存)

A Time Limit: 60ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给出n(1<= n && n <= 2*10^6)个字符串,每个字符串只包含小写英文字母,且最多有五个.问这n个字符串中出现次数最多的有多少个. 输入 单组输入.第一行输入一个数字n,接下来n行,每行包含一个字符串. 输出 输出一个数字代表答案. 示例输入 5 aba abb w aba z 示例输出 2 释放内存与不释放内存的区别:代码: #include &