【问题标题】:How to add an extra column based on pattern of other 2 columns如何根据其他 2 列的模式添加额外的列
【发布时间】:2020-06-10 13:41:23
【问题描述】:

我有一个这样的大文件:

$1   $2  $3 $4  $5  
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),其中 For $5 if $2=+/-/NA 分别添加 +1/-1 和 0,并保持相同的值直到5 美元就这样改变了价值。为了更清楚,我想制作一个关于 5 美元价值的表格。基于 2 美元,我的计数器必须将其值更改为 +1 表示 +,-1 表示 - 和 0 表示 N/A。最后,我需要新的计数器不断打印计数器值,直到 $5 的值发生变化:

$2  $5    $6
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 ($2=="-") {v=v-1 ;p=v} if ($2=="NA") {p=n; v=$5;} else {v=$5+1;p=n}; $6=v;$7=p; print}' MyFIle 

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

【问题讨论】:

  • 感谢您在问题中展示您的努力(代码)。您能否添加关于如何获得输出的逻辑部分?老实说,好帖子,但我无法得到它你如何获得预期的输出,请添加更多信息。
  • 我编辑了我的帖子。我希望我现在写得更清楚了。不幸的是,我不是信息学家,所以我的术语需要改进:P。

标签: linux awk command


【解决方案1】:
$ awk 'BEGIN {a["+"]=1;a["-"]=-1;a["NA"]=0} 
       p!=$5 {p=$5; c+=a[$2]} 
             {print $2,$5,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!=$5{c+=$2!="NA"?$2"1":0} {print $2,p=$5,c}' file | column -t

【讨论】:

  • 非常感谢!!完全按照我的意愿工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 2022-12-17
  • 1970-01-01
  • 2015-10-01
相关资源
最近更新 更多