从命令输出中提取特定的数字



我有以下问题。

在脚本中,我必须在/dev/xvda1路径上执行hdparm命令。从命令输出中,我必须提取计算出的MB/sec值。

因此,例如,如果执行命令,我有这样的输出:
/dev/xvda1:
Timing cached reads:   15900 MB in  1.99 seconds = 7986.93 MB/sec
Timing buffered disk reads: 478 MB in  3.00 seconds = 159.09 MB/sec

我必须提取7986.93和159.09。

我试着:

  1. grep -o -E '[0-9]+',但它返回给我所有的六个数字在输出
  2. grep -o -E '[0-9]',但是它只返回六个值中的第一个字符。
  3. grep -o -E '[0-9]+$',但输出为空,我想是因为数字不是输出的最后一个字符集。

我怎样才能达到我的目的?

要获得最后一个数字,您可以在前面添加.*,这将尽可能多地匹配,吞噬所有其他数字。但是,要从输出中排除该部分,您需要GNU grep或pcregrep或sed。

grep -Po '.* K[0-9.]+'

sed -En 's/.* ([0-9.]+).*/1/p'

考虑使用awk只打印您想要的字段,而不匹配数字。这将在每个Unix机器的任何shell中使用任何awk:

$ hdparm whatever | awk 'NF>1{print $(NF-1)}'
7986.93
159.09

相关内容

  • 没有找到相关文章

最新更新