J'ai besoin de comprendre comment obtenir une boucle via un fichier texte et pour chaque ligne Prenez les champs de nom, de projet et de courrier électronique, et remplacez-les dans un modèle de messagerie à envoyer.
Donc, c'est le fichier texte appelé send.txt:
Project 1,Jack,Chen,06,12,[email protected]
Project 2,Emily,Weiss,06,12,[email protected]
Project 3,Mary,Gonzalas,06,12,[email protected]
et c'est le modèle de messagerie appelé Reminder.Email:
Dear __FULLNAME__:
This is a kindly reminder that our __Project__ meeting will be held on today.
Best Regards,
CIS5027
Donc, pour chaque ligne du fichier texte, je dois remplacer dans ce modèle de courrier électronique dans les champs de [~ # ~] [~ # ~ ~ ~]: et projet. Avec les valeurs correspondantes que je peux faire pour la première ligne, mais je ne peux pas le faire pour chaque ligne.
Ceci est mon script
#
!/bin/sh
#Start your code from here
date= date "+%m/%d/%y"
print $date
#The following line is to scan a file called Event-member.data and return any lines with todays date and save them to a file called sendtoday.txt
grep -n $(date +"%m,%d") Event-member.data > sendtoday.txt
#The following line is to remove the first to characters of the file created above sendtoday.txt and output that to a file called send.txt.
cat sendtoday.txt | sed 's/^..//' > send.txt
#This is where im having trouble. When storing the values for the variables below of name, email, project #. The value of NR==1 thus it never goes through the rest of the lines. I've tried different solutions but none seem to work.
p=$(awk -F ',' 'NR==1{print $1}' send.txt)
n=$(awk -F ',' 'NR==1{print $2}' send.txt)
l=$(awk -F ',' 'NR==1{print $3}' send.txt)
e=$(awk -F ',' 'NR==1{print $6}' send.txt)
echo $p $n $l $e
#This part is to replace the values in the email template using sed and save the modified template as sendnow.txt.
sed -e "s/__FULLNAME__:/\ $n $l :/g;s/__Project__/\ $p /g" Reminder.email > sendnow.txt
cat sendnow.txt
#Yet to be written ... send out modified email templates.
exit 0
########
C'est la sortie qu'elle produit:
06/12/14
Project 1 Jack Chen [email protected]
Dear Jack Chen :
This is a kindly reminder that our Project 1 meeting will be held on today.
Best Regards,
CIS5027
Comme vous le voyez, cela a correctement remplacé les champs mais uniquement pour Jack Chen. Il y avait 3 lignes dans le fichier Send.txt, il doit donc y avoir 3 versions modifiées du modèle ci-dessus.
Vous avez utilisé NR == 1 condition NR==1{print $1}
. Cela signifie qu'il considérera la première ligne de send.txt
. Utilisez NR == 2 Condition pour obtenir 2nd ligne, etc. =OR Utilisez une boucle pour passer par toutes les lignes telles que,
while read line
do
p=`echo $line | awk -F '.' '{print $1}'`
n=`echo $line | awk -F '.' '{print $2}'`
l=`echo $line | awk -F '.' '{print $3}'`
e=`echo $line | awk -F '.' '{print $1}'`
sed -e "s/\__FULLNAME\__:/\ $n $l :/g;s/\__Project__/\ $p /g" Reminder.email > sendnow.txt
done<send.txt
peut-être envelopper votre script dans quelque chose comme
for i in $(cat send.txt); do echo "line: $i"; done
?