我有一个文件,其中包含导演的姓名及其作品,例如他们制作的电影的名称以及与此相关的所有信息。
我在这里给出了文件的前两行。
我想要一个解决方案,例如导演的名字以及他/她的名字前面他制作的电影的数量。我可以通过在管道中使用排序和唯一命令来获取电影的数量,如下所示。代码看起来像
tail -n+2 biopic.csv | awk -F "\"*,\"*" '{print $6}' | sort | uniq -c
它为我提供了一份导演名单,前面列出了他们制作的电影数量。
我真正想要的是导演的名字,后面是“,”,然后是他们制作的电影数量。
有什么方法可以在此命令的输出中插入逗号吗?
title site country year_rele box_offic director number_ subject type_of_s race_kno subject_r person_of subject_s lead_actor_actress
10 Rillingt http://ww UK 1971 - Richard Fl 1 John Chris Criminal Unknown 0 Male Richard Attenborough
答案1
你可以通过管道将其传输到perl -nle 'print "$2, $1" if /(\d+)\s(.+)/'
这只是从标准输入运行逐行表达式。
答案2
为了进行比较,我做了一个测试 biopic.csv 并根据您的示例添加了一些行,以逗号分隔。
10,Rillingt,http://ww,UK 1971,-,Richard Fl,1,John Chris,Criminal,Unknown,0,Male,Richard Attenborough
10,Rillingt,http://ww,UK 1971,-,Don Fl,1,John Chris,Criminal,Unknown,0,Male,Richard Attenborough
...
运行你的命令给我
$ tail -n+2 biopic.csv | awk -F "\"*,\"*" '{print $6}' | sort | uniq -c
6 Don Fl
5 Richard Fl
要反转它并添加逗号,您可以再次使用 awk。在空间上分割您已有的内容,然后添加您需要的字符(使用“”)。喜欢
print $2 " " $3 ", " $1
如
<firstname> <lastname>, <count>
它给了我这个
$ tail -n+2 biopic.csv | awk -F "\"*,\"*" '{print $6}' | sort | uniq -c | awk -F ' ' '{print $2 " " $3 ", " $1}'
Don Fl, 6
Richard Fl, 5