BASH:在特定CSV列中查找最大值

时间:2015-03-01 05:15:46

标签: bash csv awk sed grep

我有一个包含以下架构的CSV文件million_songs_metadata_and_sales.csv

track_id    
sales_date  
sales_count
title
song_id 
release 
artist_id   
artist_mbid 
artist_name 
duration    
artist_familiarity  
artist_hotttnesss
year

示例数据:

TRZZZZZ12903D05E3A,2014-06-19,79,Infra Stellar,SOZPUEF12AF72A9F2A,Archives Vol. 2,ARBG8621187FB54842,4279aba0-1bde-40a9-8fb2-c63d165dc554,Delerium,495.22893,0.69652442519,0.498471038842,2001

我需要在BASH中编写一个查询,以使用文件million_songs_metadata_and_sales.csv查找具有最大销售额的artist_name。

我编写了以下脚本,但未能提供正确的数据:

awk 'max=="" || $3 > max {max=$3} END{ print $9}' FS="," million_songs_metadata_and_sales.csv

有关此问题的任何解决方法吗? 谢谢!

2 个答案:

答案 0 :(得分:2)

仅当$N正在处理某一行时,才能使用

awk

$ cat file.csv
TRZZZZZ12903D05E3A,2014-06-19,77,Infra Stellar,SOZPUEF12AF72A9F2A,Archives Vol. 2,ARBG8621187FB54842,4279aba0-1bde-40a9-8fb2-c63d165dc554,Delerium 1,495.22893,0.69652442519,0.498471038842,2001
TRZZZZZ12903D05E3A,2014-06-19,79,Infra Stellar,SOZPUEF12AF72A9F2A,Archives Vol. 2,ARBG8621187FB54842,4279aba0-1bde-40a9-8fb2-c63d165dc554,Delerium,495.22893,0.69652442519,0.498471038842,2001
TRZZZZZ12903D05E3A,2014-06-19,78,Infra Stellar,SOZPUEF12AF72A9F2A,Archives Vol. 2,ARBG8621187FB54842,4279aba0-1bde-40a9-8fb2-c63d165dc554,Delerium 2,495.22893,0.69652442519,0.498471038842,2001
$ awk 'BEGIN { max=0 } $3 > max { max=$3; name=$9 } END { print name }' FS="," file.csv
Delerium
$

答案 1 :(得分:2)

cut -d, -f3,9 < data.csv | sort -nr | head -1

会这样做。

如果某些列包含逗号,则会立即失败。要进行正确的CSV解析,您需要使用一些cvs-parsing库。