有一段时间我一直在使用一个简单的命令从netstat中提取数据,以显示服务器与特定IP的连接数。
我现在正在尝试迁移该命令,同时使用ss添加更多细节,但我对如何从特定列中删除某个元素感到有些困惑。
到目前为止我的内容如下:
ss -t 2>/dev/null | awk -v OFS='\t\t' '{print $4, $5}' | sort | uniq -c | sort -nr
这将输出类似于:
的内容 1 Local Address:Port
1 172.31.6.21:imaps 124.170.xxx.xxx:47498
1 172.31.6.21:imaps 124.170.xxx.xxx:47122
我遇到的问题是我无法弄清楚如何获取忽略“:Port”因素的每个源IP的合并值。我已经尝试使用cut命令做了一些事情,但这也影响了第一列,因此输出不如所希望的那样精确。
我希望能够看到的输出类型是:
1 Local Address:Port
22 172.31.6.21:imaps 124.170.xxx.xxx
31 172.31.6.17:http 134.162.xxx.xxx
本地IP,协议类型和源IP是结果中最重要的。我想删除port元素,这样当我使用sort函数时,我可以看到特定源IP中特定协议的特定本地IP的连接数。
答案 0 :(得分:0)
这会吗?
ss -t 2>/dev/null | awk -v OFS='\t\t' '{print $4, $5}' | cut -f1,2 -d ":" | uniq | sort | uniq -c | sort -nr
更新:抱歉,没有注意到关于第一栏的评论。
更新2:添加" uniq",这应该可以解决问题。
答案 1 :(得分:0)
ss -t 2>/dev/null | awk '{
gsub('/:.[^:]*$/',"",$NF);
if(NR!=1){
a[$4" "$5]+=1
}else{
print "Count LocalAddress:Port PeerAddress"
}
}
END{
for (i in a) {
print a[i],i
}
}' | column -t
使用gsub
剪切最后一部分以省略$5
的端口。然后创建一个索引为a
的数组$4" "$5
,并在索引相同时递增数组值。
最后打印数组索引以及广告数组值。管道到column -t
以获得漂亮的O / P