2013-06-30 2 views
1

Я запускаю LIBSVM в терминале linux, вызываемом программой C. Хорошо, мне нужно выбрать выход, но формат выглядит следующим образомВыберите конкретное значение в выводе программы (Bash)

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

мне нужно выбрать только значение «80» как целое число. Я попытался с СЕПГ и пришел к этой команде:

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

Это фильтрует все целые числа на выходе и, таким образом, пока не работает, так что мне нужна помощь. Заранее спасибо

ответ

1

Попробуйте grep в режиме PCRE (-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 
Смежные вопросы