-2
RANK  NAME                    BAND  YEAR   GENERE  DOMESTIC/INTERNATIONAL 

206:Reach Out, I'll Be There:The Four Tops:1978:Pop:3/2         
207:Bye Bye Love:The Everly Brothers:1950:Classic:3/2     
208:Gloria:Them:1965:Classic:1/1      
209:In My Room:The Beach Boys:1985:Classic:5/7  
210:96 Tears:? & the Mysterians:1964:Classic:20/15     
211:Caroline, No:The Beach Boys:1975:Classic:5/7   
212:1999:Prince:1958:Classic:5/7       
213:Your Cheatin' Heart:Hank Williams:1988:Soul:7/6       
214:Rockin' in the Free World:Neil Young:1960:Pop:5/7  
215:Sh-Boom:The Chords:1967:Alternative:3/2   
216:Do You Believe in Magic:The Lovin' Spoonful:1988:Classic       
217:Jolene:Dolly Parton:1998:Classic:7/6     
218:Boom Boom:John Lee Hooker:1966:Classic:7/6

1st I tried to print a list of Rank, performers and songs with header so I tried:
but the output still have the default header under the line
nawk  'BEGIN { FS=":" 
printf "%-10s %-35s %-55s\n", "RANK", "PERFORMER","SONG"
print "=====================================================================\n"}
{printf "%-10s %-35s %-55s\n", $1, $3, $2}' songs

Мне не удалось посчитать количество песен для каждого типа жанра и сообщить итоги каждого жанра

Желаемый вывод - пример:

классический 10
R & B 5
Душа 9 и т.д.

Я старался

awk '{count+$5} END {print $5}' 

песни, но не удалось вернуть результат

2 ответа2

0

Это довольно легко с awk .

$ awk -F: '{count[$5]++}END{for(genre in count) print genre,count[genre]}' file
Soul 1
Classic 9
Pop 2
Alternative 1
  • Мы разделяем строку на : которая является разделителем для ваших входных строк.
  • Жанр появляется как 5-е поле вашей линии
  • Мы будем использовать жанр в качестве ключа и увеличивать каждый раз, когда видим его в вашей строке
  • В блоке END мы просто переберем наш массив и напечатаем ключ вместе со временем, когда мы его видели.
0

Тот же принцип, что и в решении JS, но, возможно, немного проще увидеть, что происходит, и отредактировать, если необходимо:

$> cat file | cut -d: -f5 | sort | uniq -c
   1 Alternative
   9 Classic
   2 Pop
   1 Soul

Задача была разбита на три части - cut извлекает столбец жанра из данных (разделитель : извлечение поля 5), sort жанры по алфавиту, а затем uniq -c показывает количество каждой записи, а не дублирует строки ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .