2015-03-01 5 views
0

Я следующий файл CSV file1.csvBASH: Найти максимальное значение в повторяющихся групп

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 $2; }' 

Любая помощь в решении этой проблемы? Спасибо.

Выход

awk -F, 'NR > 1 { sales[$9] += $3 } 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 
+0

Если он отсортирован таким образом, переведите его в 'awk' и выберите/распечатайте первую запись, когда ID E1001,0131 и т. Д. Изменится. надеюсь это поможет. привет –

ответ

3

С GNU AWK:

awk -F, 'NR > 1 { sales[$2] += $1 } 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[$2] += $1  # 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[$2] += $1 } END { for(s in sales) print sales[s] FS s }' file1.csv | sort -nr 

, то есть удалить GNU-специфический бит PROCINFO и передать результат через sort -nr.

+0

Мне нужно найти общий объем продаж для каждого художника. Я предполагаю, что вы находите максимальную стоимость продажи для каждого художника. – AngryPanda

+0

О, я неправильно понял. Легко исправить, хотя - код даже упрощается. См. Править. – Wintermute

+0

Спасибо! Значения правильные, но по какой-то причине отсортированный порядок не является строго убывающим. Я использую простой awk. – AngryPanda

Смежные вопросы