BASH:查找重复组中的最大值

BASH: Find maximum value in repeating groups

我有以下 csv 文件file1.csv

sales,artist
10,0131
10,0131
10,10_000 Maniacs
10,1000names
15,E1001 Ways
15,E1001 Ways
10,S101 Strings Orchestra
10,D101 Strings Orchestra
10,x0cc
10,x0cc

我正在编写 BASH 命令来查找每位艺术家的总销售额。输出按总销售额降序排列。

Expected output.

30,E1001 Ways
20,0131
20,x0cc
10,10_000 Maniacs
10,1000names   
10,S101 Strings Orchestra
10,D101 Strings Orchestra

我已经编写代码来查找最大值,但它给出了所有艺术家的最大销售额,而不是每个艺术家的总销售额最大值。

 sort -nr file1.csv | awk 'BEGIN { FS="," }{ print ; }'

有什么解决办法吗? 谢谢。

输出

awk -F, 'NR > 1 { sales[] +=  } END { for(s in sales) print sales[s] FS s }' million_songs_metadata_and_sales.csv | sort -nr -k1 | head -10

903,10000 Maniacs
562,51717
513,12012
506,35007
350,37500 Yens
2788,7000 Dying Rats
2325,2002
2210,1001 Ways
1992,1349
1968,1200 Techniques

使用 GNU awk:

awk -F, 'NR > 1 { sales[] +=  } END { PROCINFO["sorted_in"] = "@val_num_desc"; for(s in sales) print sales[s] FS s }' file1.csv

也就是

NR > 1 {                 # from the second line onwards (to skip the header)
  sales[] +=         # sum up the totals
}
END {                    # and in the end

  # GNU-specific: array traversal in numerically descending order of value
  PROCINFO["sorted_in"] = "@val_num_desc"

  for(s in sales) {      # print the lot.
    print sales[s] FS s
  }
}

使用普通 awk:

awk -F, 'NR > 1 { sales[] +=  } END { for(s in sales) print sales[s] FS s }' file1.csv | sort -nr

也就是说,删除特定于 GNU 的 PROCINFO 位并将结果通过管道 sort -nr.