Shell脚本,通过基于两列的分组求和并查找最大值

Shell脚本,通过基于两列的分组求和并查找最大值,shell,unix,awk,Shell,Unix,Awk,我想知道是否有任何简单的方法可以根据不同字段的分组对字段求和 例如。 file1.txt包含以下数据 20160622|XXX1||50.00||50.00|MONEY|Plan1| 20160622|XXX1||100.00||100.00|MONEY|Plan1| 20160623|XXX1||25.00||25.00|MONEY|Plan1| 20160622|XXX2|||||MONEY|Plan4| 20160622|XXX3||20.00||20.00|MONEY|Plan5| 现

我想知道是否有任何简单的方法可以根据不同字段的分组对字段求和

例如。 file1.txt包含以下数据

20160622|XXX1||50.00||50.00|MONEY|Plan1|
20160622|XXX1||100.00||100.00|MONEY|Plan1|
20160623|XXX1||25.00||25.00|MONEY|Plan1|
20160622|XXX2|||||MONEY|Plan4|
20160622|XXX3||20.00||20.00|MONEY|Plan5|
现在我想 根据列-2,3,5,7,8分组 对第4,6列求和 获取第1列的最大日期

预期产出:

20160623|XXX1||175.00||175.00|MONEY|Plan1|
20160622|XXX2|||||MONEY|Plan4|
20160622|XXX3||20.00||20.00|MONEY|Plan5|

这很简单,但很愚蠢。当然,如果你需要它,它就不再愚蠢了。在AWK中:

$ cat > grouper.awk
{
    max1[$2,$3,$5,$7,$8]=(max1[$2,$3,$5,$7,$8]>$1?max1[$2,$3,$5,$7,$8]:$1)
    sum4[$2,$3,$5,$7,$8]+=$4
    sum6[$2,$3,$5,$7,$8]+=$6
    a[$2,$3,$5,$7,$8]=max1[$2,$3,$5,$7,$8] OFS $2 OFS $3 OFS sum4[$2,$3,$5,$7,$8] OFS $5 OFS sum6[$2,$3,$5,$7,$8] OFS $7 OFS $8
} 
END {
    for(i in a) 
        print a[i]
}

$ awk -F\| -v OFS=\| -f grouper.awk file
20160622|XXX3||20||20|MONEY|Plan5
20160623|XXX1||175||175|MONEY|Plan1
20160622|XXX2||0||0|MONEY|Plan4

所有总和必须在不同的数组中求和(当然,您可以使用多维数组),并且分组是在数组索引中完成的。

第1列是如何分组的?在您的i/p和o/p中没有意义,您尝试了什么?您可以通过使用例如sqlite来获得更大的灵活性。您可以相当直接地围绕sqlite编写bash脚本。