GREP-仅搜索每行的前n个字符,在特殊字符后搜索数字
我在这里的第一篇文章 总而言之:我有一个netstat输出,在Windows中使用“netstat-an”命令,我想获得其中一列的顶部编号 netstat的输出如下所示:GREP-仅搜索每行的前n个字符,在特殊字符后搜索数字,grep,numbers,max,output,netstat,Grep,Numbers,Max,Output,Netstat,我在这里的第一篇文章 总而言之:我有一个netstat输出,在Windows中使用“netstat-an”命令,我想获得其中一列的顶部编号 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
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个字符,并在“:”字符后获得最大的数字
如果您需要更多信息,请告诉我,提前谢谢 如果输出有前导空格/制表符:
netstat...|awk -F':|\\s*' '{p=$4>p?$4:p}END{print p}'
如果没有前导空格:
netstat ..| awk -F':|\\s*' '{p=$3>p?$3:p}END{print p}'
如果输出具有前导空格/制表符:
netstat...|awk -F':|\\s*' '{p=$4>p?$4:p}END{print p}'
如果没有前导空格:
netstat ..| awk -F':|\\s*' '{p=$3>p?$3:p}END{print p}'
这可以是一种方法:
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
或者更好,使用获取最后一项:
$ netstat ... | sort -t':' -nrk2 | awk '{sub(/.*:/,"",$2); print $2; exit}'
58000
这可以是一种方法:
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
或者更好,使用获取最后一项:
$ netstat ... | sort -t':' -nrk2 | awk '{sub(/.*:/,"",$2); print $2; exit}'
58000
我同意这一点:
netstat -an | awk '{sub(/.*:/,"",$2); if($2>max)max=$2} END{print max}'
sub()。如果大于max
,则更新max
。最后,max
被打印出来。我会这样说:
netstat -an | awk '{sub(/.*:/,"",$2); if($2>max)max=$2} END{print max}'
sub()。如果大于max
,则更新max
。最后,max
被打印出来。这里是使用GNU awk
的另一种方法:
netstat ... | awk '{split($2,tmp,/:/); a[tmp[2]]++}END{n=asorti(a);print a[n]}'
- 我们在
tmp
数组中拆分第二列的第二个字段(由:
分隔)
- 我们将值填充为数组
a
中的键
- 在
END
中,我们使用GNU
awkasorti
函数,该函数对键进行排序
并打印最高值李>
这里是使用GNU awk的另一种方法:
netstat ... | awk '{split($2,tmp,/:/); a[tmp[2]]++}END{n=asorti(a);print a[n]}'
- 我们在
tmp
数组中拆分第二列的第二个字段(由:
分隔)
- 我们将值填充为数组
a
中的键
- 在
END
中,我们使用GNU
awkasorti
函数,该函数对键进行排序
并打印最高值李>
您也可以单独使用coreutils:
netstat ... | cut -d: -f2 | cut -d' ' -f1 | sort -nr | head -n1
输出:
58000
您也可以单独使用coreutils来执行此操作:
netstat ... | cut -d: -f2 | cut -d' ' -f1 | sort -nr | head -n1
输出:
58000
谢谢你的帮助!!我将fedorqui的答案标记为正确,因为由于声誉原因,我无法将任何答案标记为有用,但我将fedorqui和mark Setchell的答案组合到我的解决方案中。谢谢您的帮助!!我把fedorqui的答案标记为正确的,因为我不能将任何答案标记为有用的,因为我的声誉,但我结合到我的解决方案中的是fedorqui和mark Setchell的答案。你有多余的肩膀可以借我哭吗?你有多余的肩膀可以借我哭吗?