从top命令中提取线程数为整数

时间:2019-03-06 11:47:32

标签: regex bash

我需要使用以下命令从Unix top命令中获取线程总数

$ top -n 1 -H | grep -oP "(?<=Threads:).*(?=total)" | sed 's: ::g'
460 

故障:

  1. top -n 1 -H返回线程部分的第一行(“线程:111total”中的111

    $ top -H
    
    top - AA:BB:CC up X day,  A:BB,  A users,  load average: 0.30, 0.24, 0.20
    Threads: 111 total,   A running, XYZ sleeping,   0 stopped,   0 zombie
    
  2. grep -oP "(?<=Threads:).*(?=total)"从#1中提取“ 111”

  3. sed 's: ::g'删除空格(Source)

问题是此“ 111”输出不是数字,当我尝试对其进行算术运算时:

$ echo $((variable + 1))
bash: 111: syntax error: operand expected (error token is "111")

如何将其转换为整数?

注意:

  • 我不同意这只是将正则表达式结果转换为整数。每当我尝试按原样打印变量时:

    $variable
    bash: $'\E(B\E[m\E[39;49m\E[1m111\E(B\E[m\E[39;49m': command not found
    

    我尝试了以下方法:

    $ expr $((variable - 1))
    bash: 111: syntax error: operand expected (error token is "111")
    

    bc

    $ echo "$variable" | bc
    (standard_in) 1: illegal character: ^[
    (standard_in) 1: illegal character: ^[
    (standard_in) 1: syntax error
    (standard_in) 1: illegal character: ^[
    (standard_in) 1: syntax error
    (standard_in) 1: illegal character: ^[
    (standard_in) 1: syntax error
    (standard_in) 1: illegal character: ^[
    (standard_in) 1: illegal character: ^[
    (standard_in) 1: syntax error
    (standard_in) 1: illegal character: ^[
    (standard_in) 1: syntax error
    

    我想它甚至都不是字符串。

解决方案:

  1. 由于@maihnabunash的question,我终于找到了解决方案。允许我在格式化 grep输出中使用算术运算的最终脚本是:

    variable=$(top -n 1 -H | grep "Threads" | awk '{print $2}')
    

    我通过搜索该系列字符代表的任何“ {\E(B\E[m\E[39;49m\E[1m”来发现这一点。

  2. 另一种方法是在原始脚本中为-b添加批次top属性:

    top -n 1 -H -b | grep -oP "(?<=Threads:).*(?=total)" | sed 's: ::g' 
    

0 个答案:

没有答案