使用 awk 提取数字

使用 awk 提取数字

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为了这。

相关内容