将列添加到重复列总和的 awk 命令

将列添加到重复列总和的 awk 命令

我有一个数据集选项卡,如下所示:

A  B  C  D
1  aaa 1 2
1  aaa 3 4
1  aaa 5 6
1  bbb 7 8
1  ccc 9 1
1  ccc 2 3
1  ddd 4 5
1  ddd 6 7
1  ddd 8 9
1  ddd 1 2

我想添加一个新的 E 列来显示分组 B 的 C 总和

期望的输出:

A  B  C  D E
1  aaa 1 2 9
1  aaa 3 4 9
1  aaa 5 6 9
1  ddd 4 5 19
1  ddd 6 7 19
1  ddd 8 9 19
1  ddd 1 2 19

答案1

awk 'BEGIN{ FS=OFS="\t" }
  NR==FNR{ 
    if (FNR>1) a[$2]+=$3
    next
  }
  { $(NF+1)=(FNR==1 ? "E" : a[$2]) }
  1
' file file

读取输入文件两次。在第一次运行中,跳过标题行 ( if (FNR>1)...) 并将 field 的值添加到带有 key 的$3数组的值中。继续记录。a$2next

在第二次运行中,为第一行分配E新字段或为其他行分配$(NF+1)的值。a[$2]打印记录。

输出:

A       B       C       D       E
1       aaa     1       2       9
1       aaa     3       4       9
1       aaa     5       6       9
1       bbb     7       8       7
1       ccc     9       1       11
1       ccc     2       3       11
1       ddd     4       5       19
1       ddd     6       7       19
1       ddd     8       9       19
1       ddd     1       2       19

相关内容