相关疑难解决方法(0)

从bash模拟"group by"的最佳方法?

假设您有一个包含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机器,没有我习惯的大多数工具.我认为这是一个有趣的问题.

所以,请不要责怪这个问题,如果你不喜欢它就忽略它.:-)

bash scripting

215
推荐指数
6
解决办法
13万
查看次数

标签 统计

bash ×1

scripting ×1