часть сценария в 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?
Что относительно того, чтобы удалить все не быть цифрой, точкой или пространством?
$ 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
для этого.
Я предложил бы определить несколько разделителей полей (т.е. :
, ,
, и }
) и затем выбрал бы поля соответственно:
awk 'BEGIN { FS = "[:,}]" } { print $3,$5,$6,$7 } '