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

관련 정보