他のファイルの csv 列の値の出現回数をカウントし、新しい列として追加します。

他のファイルの csv 列の値の出現回数をカウントし、新しい列として追加します。

これを基本的なシェルツール(Python や Perl なし)で動作させることはできますか?

入力1:

file1.csv
    John,Doe,[email protected]
    Andy,Barry,[email protected]
    Mary,,[email protected]

INPUT2の3列目、ファイル1からの電子メールの出現回数をカウントします。

file2.log
    [email protected]&fghfgh
    asdda&[email protected]
    [email protected]&werewr

希望する出力:

result.csv
    John,Doe,[email protected],0
    Andy,Barry,[email protected],2
    Mary,,[email protected],1

本当にありがとう!

答え1

有効な入力が提供されなかったため、これを使用しました:

John,Doe,[email protected]
Andy,Barry,[email protected]
Mary,,[email protected]

次の awk ワンライナーは期待される結果を与えます:

awk -F, '{l[NR]=$0;f[NR]=$3;c[$3]++}END{for(i=1;i<=NR;i++)print l[i] "," c[f[i]]}'

ここでの問題は、タスクが2回のパスを必要とすることです。(f[]は、コンテンツ全体を解析したままにしたり、最後に再解析したりすることを避けるための便利な機能です。)しかし、なぜPythonやPerlを除外したのか理解できません(基本的なシェル ツール) なので、おそらく awk も対象ではないと思われます...

関連情報