同じフィールド内容を含むすべての行でコマンドを実行する

同じフィールド内容を含むすべての行でコマンドを実行する

学生データを含むフィールドと最後の担当教師のEメールアドレスを含む学生CSVファイルがあります。私はすべての学生と一緒に教師に自動的に電子メールを送信しようとします(sendemailを使用)。メール部分は大丈夫ですが、好きな方法でCSVからデータを取得することはできません。 csvファイルは毎日作成され、毎日異なる数の学生が含まれています。

aer,kdx,mail1
dke,kad,mail2
err,qqq,mail1
qpi,bcc,mail1
bkd,onk,mail2
kcc,mnb,mail3

awkを使用して同じ電子メールアドレスを含むすべての行を配列に入れようとしましたが、失敗しました。

この例では、3つのEメールを送信する必要があります。最初の内容は

aer,kdx
err,qqq
qpi,bcc

2番目には次のものがあります。

dke,kad
bkd,onk

3番目には以下が含まれます。

kcc,mnb

どんなヒントもありがとうございます。

ベストアンサー1

私はそうします:

sort -t, -k3,3 student.csv |
awk '
    BEGIN { FS=OFS="," }
    $3 != prev {
        close(out)
        out = $3 FS "out.csv"
        prev = $3
    }
    { print $1, $2 > out }
' ||
exit 1

for file in *,out.csv; do
    email="${file%,*}"
    send email to "$email" containing "$file"
done

おすすめ記事