我想创建一个bash脚本,它将从文本文件中获取条目并根据需求对其进行处理。
我正在尝试查找每个邮件帐户的上次登录时间。我有一个文本文件email.txt逐行包含所有电子邮件地址,需要使用以下命令检查每个帐户的上次登录时间:
cat /var/log/maillog | grep 'mail1@address.com' | grep 'Login' | tail -1 > result.txt
所以结果将在result.txt
中谢谢,
答案 0 :(得分:2)
我认为你正在寻找类似的东西。
while read email_id ; do grep "$email_id" /var/log/maillog | grep 'Login' >> result.txt ; done < email.txt
答案 1 :(得分:0)
并行获取所有电子邮件地址(而不是重复扫描可能是非常大的日志文件)。
grep -f file_with_email_addrs /var/log/maillog
天气这是值得的,取决于日志文件的大小和您获得的电子邮件地址的数量。一个小的日志文件或少量用户可能会使这个静音。但是一个大的日志文件和许多用户将使这成为一个良好的第一步。但是需要一些额外的处理。
我不确定日志行的格式或文件中登录的相对分布,接下来会发生什么取决于更多信息。
# If logins are rare?
grep Login /var/log/maillog | grep -f file_with_email_addrs | sort -u -k <column of email>
# If user count is small
grep -f file_with_email_addrs /var/log/maillog | awk '/Login/ {S[$<column of email>] = $0;} END {for (loop in S) {printf("%s\n",S[loop]);}'
答案 2 :(得分:-1)
您的问题不清楚,是否要查找最后一次登录&#39; mail_address1&#39;从文件中读取?
如果是这样的话:
#/bin/bash
while read mail_address1;
do;
# Your command line here
cat /var/log/maillog | grep $mail_address1 | grep 'Login' | tail -1 >> result.txt
done; < file_with_email_adddrs
PS:我已经改变了答案,以反映评论中的建议(非常有效的建议),建议不要使用for i in $(cat file)
样式循环来循环浏览文件。