学生データを含むフィールドと最後の担当教師の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
答え2
awk
これを使用して、次の内容$1
と$2
ファイル名が派生した3つのファイルを作成できます$3
。
GNUの使用awk
:
awk 'BEGIN{OFS=FS=","}{print $1,$2 > $3"_out.csv"}' student.csv
基準awk
:
awk 'BEGIN{OFS=FS=","}{out=$2"_out.csv"; print $1,$2 >> out; close(out)}' student.csv
次に、次のファイルを繰り返してメールを送信します。
for m in *_out.csv; do
_mail_command_
done
答え3
注文する
for i in `awk -F "," '{if(!seen[$3]++)print $3}' filename`; do awk -F "," -v i="$i" '$NF == i{print $1","$2}' filename >$i.csv; mailx -s "suject " -a "$i".csv $i</dev/null;done
テストを経てうまく機能しました
First we collecting unique email id and Fetching students who belongs to that email id and saving in file and sending email