2014-02-22 15 views
1

我一直在想我的服務器上使用以下命令 dd if=/dev/zero bs=1M count=1024 | md5sum管標準錯誤,並分別在bash的stdout/SH

輸出:

1024+0 records in 
1024+0 records out 
1073741824 bytes (1.1 GB) copied, 2.92245 s, 367 MB/s 
cd573cfaace07e7949bc0c46028904ff - 

我如何讓它顯示速度( 367 MB/s)僅作爲輸出?狀態打印到stderr

我目前使用awk,但它顯示了md5散列。

幫助被理解:)

+0

你需要* md5sum嗎?或者'=/dev/null'也足夠了嗎? – Carpetsmoker

+0

@Carpetsmoker是的,我需要md5sum。 – user2248259

+0

你只需要速度,還是哈希值? –

回答

3

首先,一個函數來模擬您的命令

simulation() { 
    echo "1024+0 records in 
1024+0 records out 
1073741824 bytes (1.1 GB) copied, 2.92245 s, 367 MB/s" >&2 
    echo "cd573cfaace07e7949bc0c46028904ff -" 
} 

$ simulation >/dev/null 
1024+0 records in 
1024+0 records out 
1073741824 bytes (1.1 GB) copied, 2.92245 s, 367 MB/s 

$ simulation 2>/dev/null 
cd573cfaace07e7949bc0c46028904ff - 

然後,將溶液:重定向標準錯誤輸出到顯示所期望的輸出回到stderr一個過程替代,捕捉標準輸出在一個變量中。

$ md5sum=$(simulation 2> >(sed -n '/MB\/s/ {s/.*, //p; q}' >&2)) 
367 MB/s 

$ echo $md5sum 
cd573cfaace07e7949bc0c46028904ff - 
+1

爲了澄清,你需要用'dd'命令替換'simulation',並把'| md5sum'右邊*在最後一個右括號之前,即:'>&2)| md5sum)' – Carpetsmoker