![使用 awk 提取数字](https://linux22.com/image/983352/%E4%BD%BF%E7%94%A8%20awk%20%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%97.png)
awk 中的脚本的一部分如下所示
sub(/^Mutation: {"seq-pos":/,"") && sub(/, "time":/," ") && sub(/}$/,"") { print >"fifth_"FILENAME}
目的是给出以下输入:
Mutation: {"seq-pos":0.00030804, "time":0, 0.164494, 1.00723}
Mutation: {"seq-pos":0.176236, "time":0.31516, 0.6876, 1.00723}
Mutation: {"seq-pos":0.224808, "time":0, 0.813626, 1.00723}
我可以得到以下输出:
0.00030804 0 0.164494 1.00723
0.17623 0.31516 0.6876 1.00723
0.224808 0 0.813626 1.00723
如果后面只有 1 个数字,代码就可以正常工作。我需要如何修改
整个剧本……
!body && /^\/\/$/ {body=1}
body && sub(/^gthcont: */,"") {print > "second_"FILENAME}
body && /^[01]+/ {print > "third_"FILENAME}
body && /^\[[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?\]/ {
print > "first_"FILENAME
print substr($0, 2, index($0,"]")-2) > "fourth_"FILENAME
}
sub(/^Mutation: {"seq-pos":/,"") && sub(/, "time":/," ") && sub(/}$/,"") { print >"fifth_"FILENAME}
化?
答案1
我建议定义多个字段分隔符(即:
、,
和}
),然后相应地选择字段:
awk 'BEGIN { FS = "[:,}]" } { print $3,$5,$6,$7 } '
答案2
那么删除所有不是数字、点或空格的内容怎么样?
$ awk '{gsub(/[^0-9. ]/,"")}1' file
0.00030804 0 0.164494 1.00723
0.176236 0.31516 0.6876 1.00723
0.224808 0 0.813626 1.00723
但请注意,使用解析 JSONawk
不是一个很好的方法。你可能需要使用jq
为了这。