如何根据其他 2 列的模式添加额外的列

How to add an extra column based on pattern of other 2 columns

我有一个这样的大文件:

          
567 NA  0   0   NA
568 NA  0   0   NA
569 NA  0   0   NA
570 NA  0   0   NA
571 +   1   1   1
572 +   1   2   1
573 +   1   3   1
966 +   1   396 1
967 NA  0   396 NA
968 NA  0   396 NA
969 NA  0   396 NA
8793    +   1   -3599   2
8794    +   1   -3598   2
3277    -   -1  -146    3
3278    -   -1  -147    3
3279    -   -1  -148    3
8795    +   1   -3597   4
8796    +   1   -3596   4
3280    -   -1  -149    5
3281    -   -1  -150    5
3282    -   -1  -151    5
3283    -   -1  -152    6
3284    -   -1  -153    6
3285    -   -1  -154    6
5692    NA  0    0  NA
3286    -   -1  -155    7

我想在一个额外的列中创建一个计数器,最好在末尾(比如 $6),其中对于 $5 if $2=+/-/NA 分别添加 +1/-1 和 0,并保持不变价值,直到 5 美元像那样改变价值。为了更清楚地说明,我想 table 阅读有关 5 美元的价值。基于 2 美元,我的计数器必须将其值更改为 +1(+)、-1(-)和 0(N/A)。最后,我需要新计数器不断打印计数器值,直到 $5 的值发生变化:

      
NA  NA  0
NA  NA  0
NA  NA  0
NA  NA  0
+   1   1
+   1   1
+   1   1
+   1   1
NA  NA  1
NA  NA  1
NA  NA  1
+   2   2
+   2   2
-   3   1
-   3   1
-   3   1
+   4   2
+   4   2
-   5   1
-   5   1
-   5   1
-   6   0
-   6   0
-   6   0
NA  6   0
-   7   -1

我输入了这个:

awk 'BEGIN {v=0; p=0} {if (=="-") {v=v-1 ;p=v} if (=="NA") {p=n; v=;} else {v=+1;p=n}; =v;=p; print}' MyFIle 

但它几乎给出了与 $5 相同的值。

$ awk 'BEGIN {a["+"]=1;a["-"]=-1;a["NA"]=0} 
       p!= {p=; c+=a[]} 
             {print ,,c}' file | column -t

NA  NA  0
NA  NA  0
NA  NA  0
NA  NA  0
+   1   1
+   1   1
+   1   1
+   1   1
NA  NA  1
NA  NA  1
NA  NA  1
+   2   2
+   2   2
-   3   1
-   3   1
-   3   1
+   4   2
+   4   2
-   5   1
-   5   1
-   5   1
-   6   0
-   6   0
-   6   0
NA  NA  0
-   7   -1

或者,高尔夫版本

$ awk 'p!={c+=!="NA"?"1":0} {print ,p=,c}' file | column -t