调整从 CSV 中提取数据的脚本的输出

调整从 CSV 中提取数据的脚本的输出

我有一个文件,其中包含导演的姓名及其作品,例如他们制作的电影的名称以及与此相关的所有信息。

我在这里给出了文件的前两行。

我想要一个解决方案,例如导演的名字以及他/她的名字前面他制作的电影的数量。我可以通过在管道中使用排序和唯一命令来获取电影的数量,如下所示。代码看起来像

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

相关内容