体会bash脚本编程思维

 

事情起因于一个面试题:

一个文件(data.txt)有很多IP地址,每一行一个IP地址,有很多重复的IP地址。写一脚本找出重复最多的IP地址个数?

我的解决思路:先排序,然后遍历所有行,计算出重复次数最多的行。

代码(cal.sh):

#! /bin/bash

sort $1 > ./tmp.txt

max=0
count=0
pre=$(head -1 tmp.txt)

for curr in $(cat tmp.txt)
do
	if [ "$pre" = "$curr" ] ; then
		count=$(($count+1))
		if [ "$max" -lt "$count" ]; then
			max=$count
		fi
	else
		pre=$curr
		count=1
	fi
done

rm ./tmp.txt

echo "$max"

脚本使用方法:cal.sh data.txt

在提示linux下有个命令uniq -c的作用后,bash脚本就简单多了:

#! /bin/bash

sort $1 | uniq -c | sort | tail -1
注:uniq -c的作用是去除连续的重复行,同时在行首显示连续重复行的个数。


相比较两套代码,可以深刻体会到:熟悉常用命令的功能,利用命令的巧妙组合完成特定任务,效率往往要高很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值