上周有朋友问一问题,他有一个包含若干行IP地址的文本文件,每个IP占一行,需要统计每个IP在文件中出现的次数,并且按照出现次数逆序排列。
开始的时候使用了一个 awk 脚本来解决这个问题:
#!/bin/awk -f
# filename: count_ip.awk
BEGIN {
}
{
ip_map[$0]+=1
}
END {
for (ip in ip_map) {
print ip_map[ip] "/t" ip
}
}
再执行
$: cat ip_file | awk -f count_ip.awk | sort -nr
后来发现其实没必要这么麻烦,利用管道组合三条命令也可以完成这个工作:
$: sort ip_file | uniq -c | sort -rn
开始的时候使用了一个 awk 脚本来解决这个问题:
#!/bin/awk -f
# filename: count_ip.awk
BEGIN {
}
{
ip_map[$0]+=1
}
END {
for (ip in ip_map) {
print ip_map[ip] "/t" ip
}
}
$: cat ip_file | awk -f count_ip.awk | sort -nr
后来发现其实没必要这么麻烦,利用管道组合三条命令也可以完成这个工作:
$: sort ip_file | uniq -c | sort -rn