вычесть из предыдущей строки - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь вычесть предыдущую групповую строку из текущей групповой строки во второй колонке. Например, следующий скрипт повторяется 100 раз.

A   
322 0.2
322 0.2
322 0.2
B   
455 0.35
455 0.35
455 0.35
C   
566 0.92
566 0.92
566 0.92

A   
322 0.18
322 0.18
322 0.18
B   
455 0.33
455 0.33
455 0.33
C   
566 0.99
566 0.99
566 0.99

Я хочу, чтобы начальная точка была A, что означает, что доля 0,2 будет сохраняться одинаковой для первой группы и 0,18 для второй группы. Другими словами, C -B, то BA. Смотрите желаемый результат.

 A  
322 0.2
322 0.2
322 0.2
B   
455 0.15
455 0.15
455 0.15
C   
566 0.57
566 0.57
566 0.57

A   
322 0.18
322 0.18
322 0.18
B   
455 0.15
455 0.15
455 0.15
C   
566 0.66
566 0.66
566 0.66

Я пытался этот код напечатать в третьем столбце, но, похоже, он вычитается из предыдущей строки, а не из предыдущей группы.

awk '{$3 = $2 - prev2; prev2 = $2; print;}'

1 Ответ

2 голосов
/ 04 февраля 2020

awk на помощь!

на основании размещенного ввода / вывода и неявных предположений ...

$ awk     '/^A/ {ia=1; c=0} 
             ia {a[c++]=$2} 
       /^[B-Z]/ {ia=c=0} 
    !ia && NF>1 {t=$2; $2-=a[++c]; a[c]=t}1' file

A
322 0.2
322 0.2
322 0.2
B
455 0.15
455 0.15
455 0.15
C
566 0.57
566 0.57
566 0.57

A
322 0.18
322 0.18
322 0.18
B
455 0.15
455 0.15
455 0.15
C
566 0.66
566 0.66
566 0.66

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

Если ваш реальный вклад не представлен этим образцом, вам может потребоваться настроить условия.

Пояснение

/^A/ {ia=1; c=0} если метка начинается с A, установите индикатор A ai, сбросьте счетчик.

ia {a[c++]=$2} если в A, сохраните значения для каждой записи

/^[B-Z]/ {ia=c=0} для других меток , сброс в A и счетчик

!ia && NF>1 {t=$2; $2-=a[++c]; a[c]=t}, если не в A и не в метке (количество полей больше одного), сохранить числовое значение, сместить ранее сохраненное значение для соответствующей записи, сохранить временное значение в качестве нового значения смещения для позиции записи.

1 print

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