3

我有一个包含如下片段的文本文件:

[#0] PROGRESS:Eval -- P values for  mu_sig-130-0 =  1
        CLs      = 0.0463722 +/- 0
        CLb      = 0.499991 +/- 0
        CLsplusb = 0.0231857 +/- 0

我想找到 CLs 行,然后只打印出数字 0.0463722

有没有办法通过 bash 命令行来做到这一点?

编辑:数字可以从文件更改为文件,但该行的其余部分保持不变。

4

6 回答 6

2
awk '$1 == "CLs", $0 = $3'

结果

0.0463722
于 2013-06-01T16:55:01.023 回答
2

使用sed

sed -nr '/\bCLs\b/ {s/.*= ([0-9.]+) .*/\1/p}' inputFile
于 2013-06-01T17:05:07.570 回答
1

您可以为此使用 awk:

awk '/    CLs      = 0.0463722 \+\/\- 0/ {print $3}' yourfile

或者,如果您只是寻找包含CLs=(可能)的行,则将模式概括为:

awk '/ CLs[ ]*=/ {print $3}' yourfile
于 2013-06-01T16:53:52.677 回答
0

awk可能是要走的路,就像其他答案一样。这是另一种GNU grep选择,启用了 PCRE 正则表达式

echo '    CLs      = 0.0463722 +/- 0' | grep -Po 'CLs\s+=\s+\K\d[.]\d+(?=[^\d])'
0.0463722
于 2013-06-01T16:57:48.157 回答
0

GNU sed

sed '/CLs\s/!d;s/.*=\s\([.0-9]\+\).*/\1/' file
于 2013-06-02T07:33:12.030 回答
0

无论其他行看起来如何,这条 grep 行都会起作用。(你提到那条线是独一无二的)。

grep -oP "^\s*CLs\s*=\s*\K[0-9.]*" file
于 2013-06-01T16:59:32.830 回答