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}'
歌曲,但未能返回结果
答案1
使用起来相当容易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
块中,我们将遍历我们的数组并打印键以及我们看到它的时间。
答案2
与 JS 的解决方案原理相同,但可能更容易看出发生了什么,并在必要时进行编辑:
$> cat 文件 | cut -d: -f5 | 排序 | uniq -c 1 替代方案 9 经典 2 流行 1 灵魂
该任务被分为三个部分 -cut
从数据中提取类型列(分隔符:
,提取字段 5),sort
按字母顺序排列类型,然后uniq -c
显示每个条目的计数,而不是显示重复的行。