Числа извлечения с 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}

ify?

0
задан 17 August 2015 в 14:14

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

Примечание однако, что парсинг JSON с awk не является очень хорошим подходом. Можно хотеть использовать jq для этого.

1
ответ дан 1 October 2019 в 04:15

Я предложил бы определить несколько разделителей полей (т.е. :, ,, и }) и затем выбрал бы поля соответственно:

awk 'BEGIN { FS = "[:,}]" } { print $3,$5,$6,$7 } ' 
1
ответ дан 1 October 2019 в 04:15

Другие вопросы по тегам:

Похожие вопросы: