Linux 如何使用awk获得相同前4列的最小值

Linux 如何使用awk获得相同前4列的最小值,linux,awk,Linux,Awk,我需要一些帮助,以获得相同的前4列的最小值,同时保持那些没有重复的 输入文件: 20180509,1086776,0004,Car1,0.010000 20180509,1086776,0004,Car1,0.010002 20180509,1086776,0004,Car1,0.010002 20180509,1086776,0004,Car1,0.010002 20180509,1086776,0004,Car1,0.010001 20180509,1086776,0004,Car1,0.0

我需要一些帮助,以获得相同的前4列的最小值,同时保持那些没有重复的

输入文件:

20180509,1086776,0004,Car1,0.010000
20180509,1086776,0004,Car1,0.010002
20180509,1086776,0004,Car1,0.010002
20180509,1086776,0004,Car1,0.010002
20180509,1086776,0004,Car1,0.010001
20180509,1086776,0004,Car1,0.010002
20180509,1086776,0004,Car1,0.010003
20180509,1086776,0004,Car1,0.010004
20180509,1086776,0004,Car2,0.010004
20200509,1086776,0004,Car1,0.010005
20180509,0000006,0004,Car1,0.010005
20180509,1086776,0005,Car1,0.010005
输出:

20180509,1086776,0004,Car1,0.010000
20180509,1086776,0004,Car2,0.010004
20200509,1086776,0004,Car1,0.010005
20180509,0000006,0004,Car1,0.010005
20180509,1086776,0005,Car1,0.010005
输出文件的最后4行被保留,因为它具有前四列的唯一组合。有人能帮我吗?
解释也会有所帮助。谢谢

因此,我可以使用以下方法来实现这一点。我刚刚了解了如何放置一个键的多个列

awk -F, 'FNR==1 {rec=$0; m[$1,$2,$3,$4]=$5; next}
    {
        if (($1,$2,$3,$4) in m) {
            if ($5 < m[$1,$2,$3,$4]) {
                rec=$0
                m[$1,$2,$3,$4]=$5
            }
        }
        else {
            print rec
            rec=$0
            m[$1,$2,$3,$4]=$5
        }
    }
END {
    print rec
}' filename
awk-F,'FNR==1{rec=$0;m[$1,$2,$3,$4]=$5;next}
{
如果($1,$2,$3,$4)单位为m){
如果($5
欢迎加入SO,请以代码的形式添加您的努力,这在SO上非常受鼓励(不是我的下一票),谢谢。按最后一个字段排序并选择唯一键,根据定义,它将为您提供每个唯一键的最小值。@Vinri Eclar-是否“相同的前4列”总是连续的?输出顺序需要如图所示吗?我试着检查其他代码,但它只涉及一列作为一个键,我不太擅长检查代码@Armali的前4列并不总是连续的。它们的顺序可能不同。最后,输出也不需要排序。