如何使用SYSTEM命令使用AWK发送电子邮件

时间:2015-04-20 09:30:04

标签: bash email awk

所以我有这个单一的家庭作业,我需要向一组学生(在diak.lst文件中列出)的所有人发送电子邮件,并将文件中的文本附加到邮件同样。学生的地址形式类似:xy9999,2个字符和4个数字。 问题似乎出现在SYSTEM部分,它说没有" attachfile"。

diak.lst采用以下格式:

  

F-名称,姓名,地址,组
  乔治彼得gp9999 511

这是脚本

#!/bin/bash
if [ ! -f $2 ] 
    then echo $2 Not a file!!
    exit 1
fi
awk -v group=$1 -v attachedfile=$2 'BEGIN {fs=" ";nr_sent_to=0;}
{
        if ($4==group){

    system("mail -s \"Attention!\"" $3 " < " attachedfile);
    nr_sent_to++;
    } 
}
END {
print nr_sent_to,"-have received the mail";
}
' diak.lst

1 个答案:

答案 0 :(得分:2)

在字符mail看到$ 3之前,你没有空格 - 尝试将\"Attention!\"" $3更改为\"Attention!\" " $3

fs=" "什么也没做。也许你的意思是FS=" ",但这是默认值,所以它什么都不做。

您的输入文件有一个逗号分隔的标题行,因此当处理$ 3等空白时,请添加NR>1子句。

awk vars已经初始化为0 / NULL,因此不需要nr_sent_to=0。你必须在END部分打印时添加+0,以确保在没有发送电子邮件的情况下打印数字而不是NULL字符串。

鉴于您在BEGIN部分所做的一切都没有用,请摆脱BEGIN部分。

不会影响脚本执行但是:awk不是C - 丢失所有无用的尾随分号。

将条件放在脚本的条件部分,而不是动作部分。

引用你的shell变量。

因此,通过更多清理,最终结果将是:

awk -v group="$1" -v attachedfile="$2" '
NR>1 && ($4==group) {
    system("mail -s \"Attention!\" " $3 " < " attachedfile)
    nr_sent_to++
}
END {
    print nr_sent_to+0, "-have received the mail"
}
' diak.lst