GREP-仅搜索每行的前n个字符,在特殊字符后搜索数字

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

我在这里的第一篇文章

总而言之:我有一个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     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
    awk
    asorti
    函数,该函数对
    键进行排序
    并打印最高值
      这里是使用GNU awk的另一种方法:

      netstat ... | awk '{split($2,tmp,/:/); a[tmp[2]]++}END{n=asorti(a);print a[n]}' 
      
      • 我们在
        tmp
        数组中拆分第二列的第二个字段(由
        分隔)
      • 我们将值填充为数组
        a
        中的
      • END
        中,我们使用
        GNU
        awk
        asorti
        函数,该函数对
        键进行排序
        并打印最高值
      您也可以单独使用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的答案。你有多余的肩膀可以借我哭吗?你有多余的肩膀可以借我哭吗?