Estou tentando contar e imprimir nomes de arquivos de música usando o awk da seguinte forma

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 

(1) Tentei imprimir uma lista de Rank, artistas e músicas com o novo cabeçalho, então tentei:

nawk  'BEGIN { FS=":" 
printf "%-10s %-35s %-55s\n", "RANK", "PERFORMER","SONG"
print "=====================================================================\n"}
{printf "%-10s %-35s %-55s\n", $1, $3, $2}' songs

mas a saída ainda tem o cabeçalho padrão abaixo da linha, então como remover a primeira linha do novo cabeçalho?

(2) Preciso contar o número de músicas de cada tipo de gênero e informar os totais de cada gênero A saída desejada é um exemplo:

classic 10
R&B 5
Soul 9 etc..

Eu tentei, mas não consegui a saída desejada:

awk '{count+$5} END {print $5}' songs 
    
por Moaledma 18.04.2014 / 20:25

1 resposta

1

Você deve pular a primeira linha:

awk 'BEGIN { FS=":" 
printf "%-10s %-35s %-55s\n", "RANK", "PERFORMER","SONG"
print "=====================================================================\n"} 
FNR==1{next}{printf "%-10s %-35s %-55s\n", $1, $3, $2}' songs

Se você não se importar com a ordem de saída, tente:

$ awk -F':' 'FNR==1{next}{a[$5]+=1} END{for(i in a){print i,a[i]}}' songs
Soul 1
Classic 6
Pop 1
    
por 18.04.2014 / 20:32