从命令输出中提取特定数字
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。
我试过了:
grep -o -E '[0-9]+'
,但它 return 对我来说输出中的所有六个数字
grep -o -E '[0-9]'
,但它return对我来说只是六个值的第一个字符。
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
我有以下问题。
在脚本中,我必须在 /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。
我试过了:
grep -o -E '[0-9]+'
,但它 return 对我来说输出中的所有六个数字grep -o -E '[0-9]'
,但它return对我来说只是六个值的第一个字符。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