CSVからデータを抽出するスクリプトの出力調整

CSVからデータを抽出するスクリプトの出力調整

監督と作品名、彼らが作成した映画名、映画に関するすべての情報を含むファイルがあります。

ここにファイルの最初の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

関連情報