監督と作品名、彼らが作成した映画名、映画に関するすべての情報を含むファイルがあります。
ここにファイルの最初の2行を提供しました。
監督の名前と彼の名前の前に彼が制作した映画の数のような解決策が欲しい。以下のように、パイプラインで並べ替えと固有のコマンドを使用して映画の数を取得できます。コードは次のとおりです
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(.+)/'
これは、標準入力で1行ずつ式を実行することです。
答え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