我有以下数据作为输入。我试图找到每个组的增量。
col1 col2 col3 group
1 2 100 alpha
1 2 100 alpha
1 2 100 alpha
3 4 200 beta
3 4 200 beta
3 4 200 beta
3 4 300 beta
5 6 700 charlie
7 8 400 tango
7 8 300 tango
7 8 700 tango
示例输出:
tango: 300
charlie:0
beta:100
alpha:0
我正在尝试这种方法,但答案是不正确的,因为有时样本之间的值会增加:
awk 'NR>1{print $NF}' foo |while read line;do grep -w $line foo|sort -k3n ;done |awk '!a[$4]++' |sort -k4
1 2 100 alpha
3 4 200 beta
5 6 700 charlie
7 8 300 tango
awk 'NR>1{print $NF}' foo |while read line;do grep -w $line foo|sort -k3n ;done |tac|awk '!a[$4]++' |sort -k4
1 2 100 alpha
3 4 300 beta
5 6 700 charlie
7 8 700 tango
最佳答案
Awk
溶液:
awk 'NR==1{ next }
g && $4 != g{ print g":"(v - gr[g]) }
!($4 in gr){ gr[$4]=$3 }{ g=$4; v=$3 }
END{ print g":"(v - gr[g]) }' file
NR==1{ next }
-跳过第一条记录g
-用于保存组名的变量v
-旨在保持组值的变量!($4 in gr){ gr[$4]=$3 }
-在第一次出现不同的组名时,将其第一个值$4
保存到数组$3
gr
-如果当前组名与上一个组名不同,则打印上一个组的最后和第一个值之间的差值输出:
alpha:0
beta:100
charlie:0
tango:300
关于bash - 检测任何列中的增量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48379335/