假设您有一个包含IP地址的文件,每行包含一个地址:
10.0.10.1
10.0.10.1
10.0.10.3
10.0.10.2
10.0.10.1
Run Code Online (Sandbox Code Playgroud)
您需要一个shell脚本,它为每个IP地址计算它在文件中出现的次数.对于先前的输入,您需要以下输出:
10.0.10.1 3
10.0.10.2 1
10.0.10.3 1
Run Code Online (Sandbox Code Playgroud)
一种方法是:
cat ip_addresses |uniq |while read ip
do
echo -n $ip" "
grep -c $ip ip_addresses
done
Run Code Online (Sandbox Code Playgroud)
然而,它真的远没有效率.
如何使用bash更有效地解决这个问题?
(有一点要补充:我知道它可以通过perl或awk解决,我对bash中的更好解决方案感兴趣,而不是那些语言.)
附加信息:
假设源文件为5GB,运行算法的机器为4GB.因此,排序不是一种有效的解决方案,也不是多次读取文件.
我喜欢类似哈希表的解决方案 - 任何人都可以对该解决方案进行改进吗?
附加信息#2:
有些人问为什么我会在bash中使用它时更加困难,例如perl.原因是在机器上我必须这样做perl不适合我.这是一个定制的linux机器,没有我习惯的大多数工具.我认为这是一个有趣的问题.
所以,请不要责怪这个问题,如果你不喜欢它就忽略它.:-)