Bash从文本文件中输入数据并对其进行处理

时间:2013-10-30 11:25:57

标签: linux bash

我想创建一个bash脚本,它将从文本文件中获取条目并根据需求对其进行处理。

我正在尝试查找每个邮件帐户的上次登录时间。我有一个文本文件email.txt逐行包含所有电子邮件地址,需要使用以下命令检查每个帐户的上次登录时间:

cat /var/log/maillog | grep 'mail1@address.com' | grep 'Login' | tail -1 > result.txt

所以结果将在result.txt

谢谢,

3 个答案:

答案 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)样式循环来循环浏览文件。