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

Extract specific number from command outout

我有以下问题。

在脚本中,我必须在 /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]+',但它 return 对我来说输出中的所有六个数字
  2. grep -o -E '[0-9]',但它return对我来说只是六个值的第一个字符。
  3. grep -o -E '[0-9]+$',但输出为空,我想是因为数字不是输出的最后一个字符集。

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

为了得到last号码,你可以在前面加一个.* ,这将尽可能匹配,吃掉所有其他号码。但是,要从输出中排除该部分,您需要 GNU grep 或 pcregrep 或 sed。

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

或者

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

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

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