我在Linux程序中运行LIBSVM,由C程序调用。好的,我需要选择输出,但格式如下
Accuracy = 80% (24/30) (classification)
我只需要选择“80”值作为整数。我尝试使用sed并来到这个命令:
sed 's/[^0-9^'%']//g' 'f' >> f
这会过滤输出中的所有整数,因此还没有工作,所以我需要帮助。提前致谢
答案 0 :(得分: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 %
答案 1 :(得分:1)
awk
非常简单。确定所需的列并从中删除“%”符号。 /^Accuracy/
正则表达式确保仅在以Accuracy开头的行上执行操作。如果您的文件只包含一行,则不需要它。
awk '/^Accuracy/{sub(/%/,"");print $3}' inputFile
或者,您可以将空格和%
设置为字段分隔符并执行
awk -F'[ %]' '/^Accuracy/{print $3}' inputFile
如果你想用sed
做,那么你可以试试:
sed '/^Accuracy/s/.* \(.*\)%.*/\1/' inputFile
答案 2 :(得分:1)
这可能适合你(GNU sed):
sed -nr '/^Accuracy = ([^%]*)%.*/s//\1/p' file