我有一个学生 csv 文件,其中包含带有学生数据的字段以及最后负责老师的邮件地址。我尝试仅自动向包含其所有学生的老师发送一封电子邮件(使用 sendemail)。邮件部分没问题,但我无法按照我想要的方式从 csv 中获取数据。 csv 文件每天创建,并且每天包含不同数量的学生。
aer,kdx,mail1
dke,kad,mail2
err,qqq,mail1
qpi,bcc,mail1
bkd,onk,mail2
kcc,mnb,mail3
我尝试使用 awk 并将包含相同邮件地址的所有行放入一个数组中,但这种方法失败了。
在此示例中,它应该发送 3 封邮件。第一个含有
aer,kdx
err,qqq
qpi,bcc
第二个含有
dke,kad
bkd,onk
第三包含
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
创建 3 个文件,其内容$1
和$2
文件名源自$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