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.
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
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.
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
Tags text-processing csv