首页 > 解决方案 > 在一列中查找重复,然后在另一列中减去值

问题描述

我的输入文件列是:

a   Otu1    w   4
b   Otu1    x   1
c   Otu2    y   12424
d   Otu3    z   1756

我想搜索第二列的每个重复,在第四列中减去它们的值。我想要的输出是:

a    Otu1   w   3
c   Otu2    y   12424
d   Otu3    z   1756

我在一个包含两列的小文件中尝试了以下 awk 脚本

a    3
a    1
b    4

awk '$1 in a{print $1, a[$1]-$2} {a[$1]=$2}' small_input_file

这只给了我减去的价值

a    2

如何为包含四列的输入文件修改此脚本?

谢谢。

标签: awk

解决方案


双重扫描算法不会关心有多少记录或它们是否连续

$ awk 'NR==FNR  {a[$2]=$2 in a?a[$2]-$4:$4; next} 
       !b[$2]++ {print $1,$2,$3,a[$2]}' file{,}

a Otu1 w 3
c Otu2 y 12424
d Otu3 z 1756

推荐阅读