1

我在由 C 程序调用的 linux 终端中运行 LIBSVM。好的,我需要选择输出,但格式如下

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

我只需要选择“80”值作为整数。我尝试使用 sed 并得出以下命令:

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

这是过滤输出中的所有整数,因此还没有工作,所以我需要帮助。提前致谢

4

3 回答 3

1

这是非常微不足道的awk。确定您需要的列并从中删除“%”符号。正/^Accuracy/则表达式确保仅在以 Accuracy 开头的行上执行操作。如果您的文件仅包含一行,则不需要它。

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

或者,您可以将空格和设置%为字段分隔符并执行

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

如果您想这样做,sed那么您可以尝试以下操作:

sed '/^Accuracy/s/.* \(.*\)%.*/\1/' inputFile
于 2013-06-30T02:49:19.997 回答
1

尝试grep在 PCRE 模式 ( -P) 下,仅打印匹配的部分 ( -o),并带有前瞻断言

 $ 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 %
于 2013-06-30T02:35:54.127 回答
1

这可能对您有用(GNU sed):

sed -nr '/^Accuracy = ([^%]*)%.*/s//\1/p' file
于 2013-06-30T04:07:04.433 回答