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