Я пытаюсь объединить все числа, которые находятся в научной нотации из файла в одну строку. ввода (test_sc.txt)Номера для печати, которые находятся в научной нотации
A B C 1e+03 1e-03 3.39e+03
G H february
E 2.834967e+02 798
j 0.000000e+00
Желаемый результат:
1e+03 1e-03 3.39e+03 2.834967e+02 0.000000e+00
Текущая команда AWK:
awk 'BEGIN {k=""}; {for (i=1; i<=NF; i++) {if ($i ~ (/e-/ || /e\+/)) {k=k$i" ";}}}; END {print k}' "test_sc.txt"
Токовый выход:
1e+03 1e-03
Хорошо, если я поменяю шаблон до /e/
это работает, но печатает february
тоже.
если я добавляю print $i
в команду awk
, все номера печатаются правильно. Однако, как я понимаю, awk
изменяет обозначения внутри при работе с числами. Как это остановить?
gawk 4.0
(Linux), something similar is described here,, но они не объясняют поведение и рекомендовал изменить awk
Кажется, задача решается проще при работе со строками, а не числами. Я попробую sed
, если это осложняется awk
.
Вы можете избежать логические ИЛИ и двойного матча регулярного выражения, используя класс символов '[+ -]' и сделать использование тернарного оператора исключает конечное пространство 'awk '{для (i = 1; i <= NF; i ++), если ($ i ~/e [- +] /) {k = (k? k OFS $ i: $ i)}} END {print k} '' –
Это может показаться, что многие строки были числами в научной нотации, когда они не являются. Вашему регулярному выражению потребуется много работы, вместо этого посмотрите на другие ответы. –