unix - Linux : How to AWK to find maximums in ever

我有这个记录的文件
我的文件.txt :

firstname lastname note 
Ben Quick 12
Fred Free 10
Mark Marked 18
Mark Marked 20
Ben Quick 8

并想用他最大的音符打印每个独特的人
结果会是这样

firstname lastname maxNote
Ben Quick 12
Fred Free 10
Mark Marked 20

所以我有这个 awk 脚本

#!/bin/awk -f


BEGIN {
    print "firstname lastname maxNote"
}

NR > 1 { 
    list[$1," ",$2]++
}

END {
    for(l in list)
        print l
}

它只打印唯一的名字+姓氏
我的问题是:如何按音符对它们进行排序并打印每行的整行?

感谢您的帮助!

最佳答案

使用 GNU awk:

awk 'NR==1{print; next}
     {
       note=$NF                            # save note from last field
       NF--                                # remove last field from $0
       name=$0
       if(a[name]<note){a[name]=note}
     }
     END{
       for(i in a){print i,a[i]}
     }' file

输出:

firstname lastname note 
Fred Free 10
Ben Quick 12
Mark Marked 20

参见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

关于unix - Linux : How to AWK to find maximums in every unique line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67114476/

相关文章:

string - 为什么 String::from(&str) 和 &str.to_string()

design-patterns - 使用字符串与枚举作为工厂方法的参数?

scala - 在范围内显示时未找到隐式

r - 在 R 中的特定值之后将每行的值设置为 NA

macos - MacOS M1 上的 Docker kafka 问题停留在配置上

python - 避免嵌套 .apply()

awk - 拆分但保留分隔符很少

css - 在sass中混合两种颜色

c++ - 为什么 sizeof 运算符对数组产生不同的结果

javascript - jQuery 获取所有 值的数组