在下面的示例中,我想grep
从同一行中提取 2 个数字:
// ExampleFile.txt
solver.cpp:229] Iteration 2000, loss = 0.305721
solver.cpp:245] Train net output #0: accuracy = 0.926112
solver.cpp:245] Train net output #1: accuracy = 0.723957
solver.cpp:245] Train net output #2: accuracy = 0.599623
sgd_solver.cpp:106] Iteration 2000, lr = 0.000227383
solver.cpp:229] Iteration 2020, loss = 0.294722
solver.cpp:245] Train net output #0: accuracy = 0.855208
solver.cpp:245] Train net output #1: accuracy = 0.71616
solver.cpp:245] Train net output #2: accuracy = 0.619429
我需要“solver.cpp:229] Iteration”右侧和“, loss =”右侧的数字。我需要同时获取这两个数字,以便生成的文件如下所示:
// ResultFile.txt
2000 0.305721
2020 0.294722
我只知道如何像这样使用 grep 获取其中一个数字
grep ", loss = " ExampleFile.txt | sed -e "s/.* //" > ResultFile.txt
有谁知道如何同时获得第二个号码?
一种可能的方式...
我输了
grep
,但在这里sed
-n
在我们要求之前不要打印-r
使用 ERE,所以我不必转义()
和+
元字符s
搜索和替换/old/new/
.*
匹配任何(或不)字符([0-9]+)
括号以使这部分模式保持前一个字符[0-9]
的第+
一次或多次出现。\1\2
对早先用括号保存的模式的反向引用p
打印我们想看到的位如果输出是您想要的,请将其重定向到您的输出文件:
使用 awk 将字段分隔符指定为“、”逗号和“空格”并匹配其中包含“迭代”的那些行,然后打印列 #3 和 #7(或 $NF 作为最后一列而不是 $7)