我需要向用户发送一封电子邮件,其中包含目录中多个文件中的3个文件行数,大小和日期。文件将每月生成,因此每月邮件必须在文件生成后发送。
目标直播:/work/directory
目录下的文件列表:
month_f1.txt
month_f2.txt
month_f3.txt
old_month_f1.txt
old_month_f2.txt
电子邮件应按照以下文件详细信息发送:
Hi All,
PFB file details.
---------------------------------
|filename |rowcount |size |
---------------------------------
|month_f1.txt |100 |20567 |
|month_f2.txt |200 |40567 |
|month_f3.txt |300 |60567 |
---------------------------------
提前致谢!!
答案 0 :(得分:1)
这是一个重构得很好的Awk脚本,可以一次完成所有事情。
this.counter = setInterval(function () {
console.log("toto");
}, 1000);
awk 'BEGIN { print "Subject: Numbers for this month\n";
print "Hi All,\n\nPFB file details\n"
print "----------------------------------"
print "|filename |rowcount |size |"
print "----------------------------------" }
{ bytes[FILENAME] += length($0)+1; ++lines[FILENAME] }
END { for (j=1; j<ARGC; ++j)
printf("|%-15s|%9i|%6i|\n", ARGV[j], lines[ARGV[j]], bytes[ARGV[j]])
print "----------------------------------" }' /work/directory/file* |
sendmail email@domain.com
是一个内置的Awk变量,其文件名是当前打开的文件,FILENAME
是文件名参数列表。其余的应该是相当明显的;我们将当前行的长度(加上由Awk剥离的终止换行符加1)添加到该文件的字节数,并增加行数。完成后,我们打印累计数字。
答案 1 :(得分:0)
要在work/directory/
中发送有关所有文件的统计信息,这个shell脚本应该可以解决问题:
#!/bin/sh
echo "Subject: Stats of 3 files\n\nHi All,\n\nPFB file details" > /tmp/stats_mail.txt
printf "%40s %8s %8s\n" filename rowcount size >> /tmp/stats_mail.txt
for file in "/work/directory/file1" "/work/directory/file2" "/work/directory/file3"; do
cnt=`wc $file | awk {'print $1" "$3'}`;
cnt_line=$(echo $cnt | cut -f1 -d" ")
cnt_size=$(echo $cnt | cut -f2 -d" ")
printf "%40s %8s %8s\n" $file $cnt_line $cnt_size >> /tmp/stats_mail.txt
done
sendmail "email@domain.com" < /tmp/stats_mail.txt
rm /tmp/stats_mail.txt
这假设您已设置sendmail
。
根据文件名,大小和行数的长度,您可能需要调整列大小(%40s
和%8s
,它们会出现在标题中,然后出现在{{1}中}循环)
以下是示例输出:
while