【问题标题】:BASH: Finding maximum value in a particular CSV columnBASH:在特定的 CSV 列中查找最大值
【发布时间】:2015-05-01 15:48:20
【问题描述】:

我有一个 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 查找销售额最高的艺术家名称。

我编写了以下脚本,但它无法给我正确的数据:

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

有解决这个问题的办法吗? 谢谢!

【问题讨论】:

    标签: bash csv awk sed grep


    【解决方案1】:

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

    会做的。

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

    【讨论】:

      【解决方案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
      $
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-13
        • 2015-05-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        相关资源
        最近更新 更多