считайте числа с e в awk

Привет файл я работаю со взглядами:

   header
//
SeqT: {"POS-s":174.683, "time":0.0130084}
SeqT: {"POS-s":431.49, "time":0.0221447}
[2.04545e+2]:0.00843832,469:0.0109533):0.00657864,((((872:0.00120503,((980:0.0001);
[29]:((962:0.000580339,930:0.000580339):0.00543993);
absolute:
gthcont: 5 4 2 1 3 4 543 5  67 657  78 67 8  5645 6 
01010010101010101010101010101011111100011
1111010010010101010101010111101000100000
00000000000000011001100101010010101011111

Используя thsi кодируют от awk

    !body && /^\/\/$/              {body=1}
body  && sub(/^gthcont: */,"") {print > "second_"FILENAME}
body  && /^[01]+/              {print > "third_"FILENAME}
body  && /^\[[0-9]+\]/ {
    print > "first_"FILENAME
    print substr($0, 2, index($0,"]")-2) > "fourth_"FILENAME
}
sub(/^SeqT: {"POS-s":/,"") && sub(/, "time":/," ") && sub(/}$/,"") { print >"fifth_"FILENAME}

Мне нужен он, чтобы быть разделенным на пять файлов. Первый файл

[2.04545e+2]:0.00843832,469:0.0109533):0.00657864,((((872:0.00120503,((980:0.0001);
[29]:((962:0.000580339,930:0.000580339):0.00543993);

Второй файл должен быть

5 4 2 1 3 4 543 5  67 657  78 67 8  5645 6

Следующий файл должен быть

01010010101010101010101010101011111100011
11110100100101010101010101111010001000001
00000000000000011001100101010010101011111

четвертый файл должен иметь числа из скобок в первом файле.. в этом случае это только было бы

2.04545e+2
29

и последний файл

174.683 0.00130084
431.49 0.0221447 

Работы кода, но проблема состоят в том, что она имеет проблемы с использованием научной нотации (e+7 и что-то вроде этого).In эта строка существует, не распечатывают в файле, просто содержащем числа от []. Таким образом, в настоящее время файл не похож 2.04545e+2 29, но onl y

29..

как я могу скорректировать awk, чтобы также читать в научной нотации в []?

-1
задан 26 July 2015 в 18:22

1 ответ

Необходимо заменить регулярное выражение /^\[[0-9]+\]/, который только соответствует одной или нескольким цифрам в квадратных скобках с regex, который соответствует Вашему входу с плавающей точкой.

Например, взятие выражения

[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?

для числа с плавающей запятой с экспонентой от Соответствия Jan Goyvaerts Числам с плавающей точкой с учебным руководством по Регулярному выражению и заменой им в Вашем коде awk:

awk 'BEGIN{body=0}
!body && /^\/\/$/    {body=1}
body  && /^\[/       {print > "first_"FILENAME}
body  && /^pos/{$1="";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
}' file

с Вашим входом в качестве примера в file, необходимо теперь добраться

$ cat fourth_file 
2.04545e+2
29
0
ответ дан 1 October 2019 в 06:19

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

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