• 面试笔试-脚本-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地址

  • 相关阅读:
    Huawei vlan 配置及vlan 间通讯
    Huawei DHCP 中继配置实例
    Huawei DHCP 全局配置与接口配置
    Cisco DHCP 配置方法
    VS Code的golang开发配置 之 代码提示
    天气服务API文档 第1版
    Android 让图片等比例缩放的三种方法
    Jar mismatch! Fix your dependencies
    android ActionBarSherlock使用说明
    Only the original thread that created a view hierarchy can touch its views.
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5400250.html
Copyright © 2020-2023  润新知