Ajustar a saída de um script que extrai dados do CSV

2

Eu tenho um arquivo com nomes de diretores e seu trabalho, como nomes dos filmes produzidos por eles e todas as informações relacionadas a isso.

Eu dei as duas primeiras linhas do arquivo aqui.

Eu quero uma solução como o nome do diretor e o número de filmes feitos por ele na frente do nome dele.Eu sou capaz de obter o número de filmes da seguinte maneira usando comandos únicos e de classificação em pipelines . O código parece

tail -n+2 biopic.csv | awk -F "\"*,\"*" '{print $6}' | sort | uniq -c

que me fornece uma lista de diretores precedida pelo número de filmes que eles fizeram.

O que eu realmente quero é o nome dos diretores seguido ',' e depois o número de filmes que eles fizeram.

Existe alguma maneira de inserir uma vírgula na saída deste comando?

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
    
por sonu 06.04.2017 / 08:26

2 respostas

1

Você pode canalizá-lo para perl -nle 'print "$2, $1" if /(\d+)\s(.+)/'

Isso simplesmente executa uma expressão linha por linha a partir da entrada padrão.

    
por 06.04.2017 / 09:01
1

Para comparação, fiz um teste em biopic.csv e com algumas linhas baseadas em seu exemplo, separadas por vírgulas.

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
...

Executando seu comando me dá

$ tail -n+2 biopic.csv | awk -F "\"*,\"*" '{print $6}' | sort | uniq -c
6 Don Fl
5 Richard Fl

Para reverter isso e adicionar uma vírgula, você pode usar o awk novamente. Dividir no espaço o que você já tem, e adicionar caracteres que você precisa de volta (usando ""). Como

print $2 " " $3  ", " $1

como em

<firstname> <lastname>, <count>

Isso me dá isso

$ tail -n+2 biopic.csv | awk -F "\"*,\"*" '{print $6}' | sort | uniq -c | awk -F ' ' '{print $2 " " $3  ", " $1}'
Don Fl, 6
Richard Fl, 5
    
por 06.04.2017 / 11:06