mcE*_*nge 6 command-line bash grep text-processing
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
Run Code Online (Sandbox Code Playgroud)
我需要“solver.cpp:229] Iteration”右侧和“, loss =”右侧的数字。我需要同时获得两个数字,这样我的结果文件看起来像这样:
// ResultFile.txt
2000 0.305721
2020 0.294722
Run Code Online (Sandbox Code Playgroud)
我只知道如何使用这样的 grep 获取其中一个数字
grep ", loss = " ExampleFile.txt | sed -e "s/.* //" > ResultFile.txt
Run Code Online (Sandbox Code Playgroud)
有谁知道如何同时获得第二个数字?
一种可能的方式...
% grep 'solver.cpp:229' ExampleFile.txt | cut -d ' ' -f 3,6 | tr -d ','
2000 0.305721
2020 0.294722
Run Code Online (Sandbox Code Playgroud)
我输了,grep但在这里sed
$ sed -nr 's/.*Iteration ([0-9]+).*loss.*( [0-9]+.*)/\1\2/p' ExampleFile.txt
2000 0.305721
2020 0.294722
Run Code Online (Sandbox Code Playgroud)
-n 在我们要求某些东西之前不要打印-r使用 ERE 这样我就不必转义()和+元字符s 搜索和替换 /old/new/.* 匹配任何(或不匹配)字符([0-9]+)括号以保持模式[0-9]的这一部分是+前一个字符的第一次或多次出现。\1\2 对之前用括号保存的模式的反向引用p 打印我们想看到的位如果输出是您想要的,请将其重定向到您的输出文件:
sed -nr 's/.*Iteration ([0-9]+).*loss.*( [0-9]+.*)/\1\2/p' ExampleFile.txt > ResultFile.txt
Run Code Online (Sandbox Code Playgroud)
与AWK指定˚F ield分离器“”逗号和‘空间’并匹配那些含有‘迭代’在线,下一个打印列#3和#7(或$ NF作为最后一列,而不是$ 7)
awk -F'[, ]' '/Iteration/ {print $3,$7}' infile
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1870 次 |
| 最近记录: |