linux - 按另一列的值计算一个列组的值数

标签 linux bash count

我有一个这样的文本文件:

asn|prefix|ip|domain
25008|85.192.184.0/21|85.192.184.59|solusi-it.com
25008|85.192.184.0/21|85.192.184.59|samtimes.ru
131755|103.31.224.0/24|103.31.224.58|karosel-ind.com
131755|103.31.224.0/24|103.31.224.58|solusi-it.com
9318|1.232.0.0/13|1.234.91.168|solusi-it.com
9318|1.232.0.0/13|1.234.91.168|es350.co.kr

有没有一种方法可以使用 Linux Bash 命令计算唯一域中唯一 ip 的数量并得到这样的结果?

domain|count_ip
solusi-it.com|3
samtimes.ru|1
karosel-ind.com|1
es350.co.kr|1

最佳答案

:

perl -F'\|' -lane '                                                            
    $. > 1 and $domains->{$F[3]}->{$F[2]}++;
    END{
        print "domain|count_ip";
        print $_, "|", scalar keys %{ $domains->{$_} } for keys %$domains;
    }
' file | tee new_file

这背后的想法是使用 HASH 的 HASH

$domains->{$F[3]}->{$F[2]}++

$F[3] 是域,$F[2] 是 IP。唯一性是保证。哈希键始终是唯一的。

输出:

domain|count_ip
es350.co.kr|1
karosel-ind.com|1
samtimes.ru|1
solusi-it.com|3

关于linux - 按另一列的值计算一个列组的值数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27802769/

相关文章:

python - 将 2 个 csv 文件与一个唯一列但不同的标题合并

python - 如何使用参数从 bash 调用 python 脚本?

合并排序算法的反转计数的 JavaScript 实现

java - 按扩展名列出和计数文件

linux - 无法进入 Gentoo Linux 中的文件系统目录

javascript - 将 React 应用程序作为后台进程运行

linux - 如何使用linux命令行计算某些网页上的图像加载时间?

android - 如何在不使用任何构建工具的情况下使用 aapt2 编译 Android 应用程序?

linux - 如何在 proxmox 中为容器进行端口路由?

php - 每个月的Mysql计数