Как найти / напечатать два последовательных числа с плавающей запятой противоположного знака в одном поле? - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь напечатать вхождения двух последовательных строк (чисел с плавающей запятой) с противоположным знаком (+/-). Например, если у меня есть это:

 8.00
 89.11
-21.42
-1.98
-44.23
 23.72
 34.21
 56.72
-65.82
-37.49
-23.41

Я хочу напечатать:

 89.11
-21.42
-44.23
 23.72
 56.72
-65.82

Мне интересно, как лучше подходить к нему с помощью awk.

Ответы [ 2 ]

1 голос
/ 24 мая 2019
$ awk '{cV=($0<0)} (NR>1) && (pV!=cV){print p0 ORS $0} {p0=$0; pV=cV}' file
 89.11
-21.42
-44.23
 23.72
 56.72
-65.82
1 голос
/ 24 мая 2019

Вот так:

awk 'NR>1&&(p<0&&$0>=0||p>=0&&$0<0){print p;print $0}{p=$0}' file

Я использую переменную p для сохранения предыдущей строки.Начиная со строки 2, я проверяю, если (p<0&&$0>=0||p>=0&&$0<0)

Примечание: я рассматриваю 0 как положительное значение в приведенном выше решении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...