-1

我正在使用 while 循环来读取 xyz.txt 文件和包含如下内容的文件:

2 - info1 
4 - info2
6 - info3
9 - info4 

此外,我使用 if 条件来匹配 count -gt then y 值,因此它将发送一封电子邮件。每次它与 if 条件匹配时我面临的问题是它正在发送我想要一次的电子邮件,它应该读取文件直到结束,如果条件匹配将下一行输出存储到文件中,然后发送包含所有信息的文件。目前我收到的电子邮件号码。

希望我的问题很清楚我想我正在寻找返回函数,一旦条件匹配它继续读取文件直到最后并存储信息。

count=`echo $line | awk '{print $3}'`
cnt=o
while read line
do
if [ "$count" -gt "$x" ]; then ---> This logic is working fine
cnt=$(( $cnt + 1)) --- > This logic is working fine
echo $line > info.txt  -----> In info.txt I want to store info in 1 go which ever matches condition.
export info.txt=$info.txt
${PERL_BIN}/perl $send_mail
fi
done < file.txt
4

2 回答 2

1

如果您只想发送一次电子邮件,请不要将发送邮件的 Perl 调用放在循环中;将其放在循环之外(循环结束后)。使用 append ( >>) 逐步构建文件。

count=`echo $line | awk '{print $3}'`
cnt=0   # 0 not o!
while read line
do
    if [ "$count" -gt "$x" ]; then
        cnt=$(($cnt + 1)) 
        echo $line >> info.txt
    fi
done < file.txt

if [ $cnt -gt 0 ]
then
    export info_txt=$info.txt
    ${PERL_BIN}/perl $send_mail
fi
于 2013-04-28T07:30:05.480 回答
0

好的。我试图掌握你想要什么,我认为是这样的:

首先,在循环之前,删除所有旧的 info.txt 文件。

rm info.txt

然后,每次通过循环,将新行添加到它,如下所示:

echo $line >> info.txt

注意双箭头>>。这意味着追加,而不是覆盖。

最后,在循环之后进行电子邮件发送。

于 2013-04-28T07:32:34.927 回答