我的文件包含IP列表:
1.1.1.1
2.2.2.2
3.3.3.3
5.5.5.5
1.1.1.1
5.5.5.5
我想创建打印上述IP的计数器列表的文件,如:
1.1.1.1: 2
2.2.2.2: 1
3.3.3.3: 1
5.5.5.5: 2
其中2,1,1,2是柜台。
我开始编写适用于最终计数IP和已知计数的脚本,但不知道如何继续
./ff.sh file_with_IPs.txt
脚本
#!/bin/sh
file=$1
awk '
BEGIN {
for(x=0; x<4; ++x)
count[x] = 0;
ip[0] = "1.1.1.1";
ip[1] = "2.2.2.2";
ip[2] = "3.3.3.3";
ip[3] = "5.5.5.5";
}
{
if($1==ip[0]){
count[0] += 1;
} else if($1==ip[1]){
count[1] += 1;
}else if($1==ip[2]){
count[2] += 1;
}else if($1==ip[3]){
count[3] += 1;
}
}
END {
for(x=0; x<4; ++x) {
print ip[x] ": " count[x]
}
}
' $file > newfile.txt
主要问题是我不知道文件中存储了多少IP以及它们的外观。
每当awk捕获新IP时,我需要增加数组ip
。
答案 0 :(得分:4)
我认为使用sort -u
会更容易,但是使用awk可以做到这一点:
awk '{a[$0]++; next}END {for (i in a) print i": "a[i]}' file_with_IPs.txt
输出:
1.1.1.1: 2
3.3.3.3: 1
5.5.5.5: 2
2.2.2.2: 1
的sudo_O recommended me的帮助下
答案 1 :(得分:3)
您可以使用uniq
执行该任务,例如:
sort IPFILE | uniq -c
(注意,这会在IP前面打印出事件。)
或者使用awk(如果线路上只有IP地址):
awk '{ips[$0]++} END { for (k in ips) { print k, ips[k] } }' IPFILE
(注意,这会打印无序的IP地址,但您可以使用awk,阅读文档,asort
,asorti
,或只是在管道后附加sort
。)