2013-06-30 63 views
1

我在一個C程序調用的linux終端中運行LIBSVM。好吧,我需要選擇輸出,但格式如下在程序輸出(Bash)中選擇一個特定的值

Accuracy = 80% (24/30) (classification) 

我需要只挑選「80」值作爲整數。我試圖用sed和來到這個命令:

sed 's/[^0-9^'%']//g' 'f' >> f 

這是過濾所有整數輸出,因此,還沒有成型,所以我需要幫助。在此先感謝

回答

1

嘗試在PCRE模式grep-P),只打印出匹配的零件(-o),具有lookahead assertion

$ echo "Accuracy = 80% (24/30) (classification)" | grep -Po '[0-9]+(?=%)' 
80 

的正則表達式:

[0-9] # match a digit 
+  # one or more times 
(?=%) # assert that the digits are followed by a % 
+0

謝謝,它工作得很好。 :d –

1

這是非常瑣碎與awk。確定您需要的欄目並從中刪除'%'符號。 /^Accuracy/正則表達式可確保僅在以精度開頭的行上執行該操作。如果您的文件只包含一行,則不需要它。

awk '/^Accuracy/{sub(/%/,"");print $3}' inputFile 

或者,您也可以設置空間和%作爲字段分隔並做

awk -F'[ %]' '/^Accuracy/{print $3}' inputFile 

如果你想與sed做到這一點,那麼你可以嘗試這樣的:

sed '/^Accuracy/s/.* \(.*\)%.*/\1/' inputFile 
1

這可能適合你(GNU sed):

sed -nr '/^Accuracy = ([^%]*)%.*/s//\1/p' file 
相關問題