我在这里的第一篇文章。
总结:我有一个netstat输出,使用" netstat -an" Windows中的命令,我想得到其中一列的最高编号。
netstat的输出是这样的:
TCP 10.45.43.232:50387 10.42.48.61:902 ESTABLISHED
TCP 10.45.43.232:50559 46.228.47.115:443 CLOSE_WAIT
TCP 10.45.43.232:52501 10.48.48.128:3389 ESTABLISHED
TCP 10.45.43.232:58000 10.46.48.243:63713 ESTABLISHED
我想要的结果是:
58000
这个数字是第二列的最大值,在"之后:"字符
所以,从本质上讲,我想要一个grep(和/或sed,awk等)可以搜索文件,只查看每行的前25个字符,并获得#34后的最高数字;:"字符。
如果您需要更多信息,请告诉我,提前谢谢!
答案 0 :(得分:1)
如果输出有前导空格/标签:
netstat...|awk -F':|\\s*' '{p=$4>p?$4:p}END{print p}'
如果没有前导空格:
netstat ..| awk -F':|\\s*' '{p=$3>p?$3:p}END{print p}'
答案 1 :(得分:1)
这可以是一种方法:
netstat ... | sort -t':' -nrk2 | awk -F"[ :]" '{print $8; exit}'
分段:
根据:
作为分隔符对其进行排序,并考虑第二列:
$ netstat ... | sort -t':' -nrk2
TCP 10.45.43.232:58000 10.46.48.243:63713 ESTABLISHED
TCP 10.45.43.232:52501 10.48.48.128:3389 ESTABLISHED
TCP 10.45.43.232:50559 46.228.47.115:443 CLOSE_WAIT
TCP 10.45.43.232:50387 10.42.48.61:902 ESTABLISHED
打印最大的:
$ netstat ... | sort -t':' -nrk2 | awk -F"[ :]" '{print $8; exit}'
58000
或者更好,使用Mark Setchell's approach获取最后一项:
$ netstat ... | sort -t':' -nrk2 | awk '{sub(/.*:/,"",$2); print $2; exit}'
58000
答案 2 :(得分:1)
我会这样做:
netstat -an | awk '{sub(/.*:/,"",$2); if($2>max)max=$2} END{print max}'
sub()
部分从第二个字段中删除所有字符,包括冒号,从而提取端口。如果大于max
,则max
会更新。最后,打印max
。
答案 3 :(得分:1)
这是使用GNU awk
的另一种方式:
netstat ... | awk '{split($2,tmp,/:/); a[tmp[2]]++}END{n=asorti(a);print a[n]}'
:
分隔)拆分为tmp
数组keys
中将值填充为a
。END
我们使用GNU
awk asorti
函数sorts
keys
并打印最高版本。 答案 4 :(得分:0)
您也可以单独使用coreutils:
netstat ... | cut -d: -f2 | cut -d' ' -f1 | sort -nr | head -n1
输出:
58000