从字符分隔文件中读取并赋值给变量 | ksh Unix shell
Read from character delimted file and assign into variables | ksh Unix shell
我正在使用 ksh。
我需要从文件中读取数据到变量中,然后进一步使用它们来发送电子邮件。
- 文件可以由任何不常用的字符(如 | ^ 等)或字符组分隔。
- 需要从文件中检索邮件、抄送、密件抄送、主题、正文。
- 我正在从 table 假脱机到文件中,因此定界符可以是任何字符,但在通用英语中较少使用,因为像 , & * 等字符可能出现在 Body 中并且可能 return 错误的值。
文件:(cc 和 bcc 在文件即它们是空白的)
na734@company.com|NA734@company.COM|||TEST EMAIL FOR LMS ERROR|Hi <<FIRST_NAME>>, <br><br>
Following errors are generated during migration of LMS data into FIMS application.<br><br><br>
The respective details of Error(s) occured is logged into the attached file.
Regards,<br>
FIMS Web Application<br><br><br>
This is an auto-generated e-mail, please don't reply to this e-mail
Reply to the following person for further details:
na734@company.com
代码使用:
while IFS='|' read -r a1 a2 a3 a4 a5 a6
do
flag1=`echo $a1`
flag2=`echo $a2`
flag3=`echo $a3`
flag4=`echo $a4`
flag5=`echo $a5`
flag6=`echo $a6`
done < $RUNTIME/EMAIL_$System`date +%y%m%d`.csv
没有设置变量。
并且在使用以下代码时:它显示了不需要的输出:
while IFS='|' read -r a1 a2 a3 a4 a5 a6
do
echo $a1
echo $a2
echo $a3
echo $a4
echo $a5
echo $a6
done < $RUNTIME/EMAIL_$System`date +%y%m%d`.csv
输出:(一堆空行)
na734@company.com
NA734@company.COM
TEST EMAIL FOR LMS ERROR
Hi <<FIRST_NAME>>, <br><br>
Following errors are generated during migration of LMS data into FIMS application.<br><br><br>
The respective details of Error(s) occured is logged into the attached file.
Regards,<br>
FIMS Web Application<br><br><br>
This is an auto-generated e-mail, please don't reply to this e-mail
Reply to the following person for further details:
na734@company.com
在 ksh 中,管道中的最后一个命令在当前 shell 中执行。
我会处理第一行,然后将所有其他行附加到 body
变量。
file="$RUNTIME/EMAIL_$System$(date +%y%m%d).csv"
sed 1q "$file" | IFS="|" read -r from to cc bcc subj body
body="$body
$(sed 1d "$file")"
printf "%s: %s\n" from "$from" to "$to" cc "$cc" bcc "$bcc" subj "$subj" body "$body"
from: na734@company.com
to: NA734@company.COM
cc:
bcc:
subj: TEST EMAIL FOR LMS ERROR
body: Hi <<FIRST_NAME>>, <br><br>
Following errors are generated during migration of LMS data into FIMS application.<br><br><br>
The respective details of Error(s) occured is logged into the attached file.
Regards,<br>
FIMS Web Application<br><br><br>
This is an auto-generated e-mail, please don't reply to this e-mail
Reply to the following person for further details:
na734@company.com
我有时喜欢用sed
代替head/tail
我使用了 cut
命令,将它们分配给变量似乎效果很好。虽然,我不确定您的文件中是否会有多个条目。
Testing.sh
#!/usr/bin/ksh
a1=$(cat test.txt | cut -f1 -d '|' -s)
a2=$(cat test.txt | cut -f2 -d '|' -s)
a3=$(cat test.txt | cut -f3 -d '|' -s)
a4=$(cat test.txt | cut -f4 -d '|' -s)
a5=$(cat test.txt | cut -f5 -d '|' -s)
a6=$(cat test.txt | cut -f6 -d '|')
echo $a1
echo $a2
echo $a3
echo $a4
echo $a5
echo $a6
test.txt
na734@company.com|NA734@company.COM|||TEST EMAIL FOR LMS ERROR|Hi <<FIRST_NAME>>, <br><br>
Following errors are generated during migration of LMS data into FIMS application.<br><br><br>
The respective details of Error(s) occured is logged into the attached file.
Regards,<br>
FIMS Web Application<br><br><br>
This is an auto-generated e-mail, please don't reply to this e-mail
Reply to the following person for further details:
na734@company.com
输出:
$Testing.sh
na734@company.com
NA734@company.COM
TEST EMAIL FOR LMS ERROR
Hi <<FIRST_NAME>>, <br><br> Following errors are generated during migration of LMS data into FIMS application.<br><br><br> The respective details of Error(s) occured is logged into the attached file. Regards,<br> FIMS Web Application<br><br><br> This is an auto-generated e-mail, please don't reply to this e-mail Reply to the following person for further details: na734@company.com
我正在使用 ksh。
我需要从文件中读取数据到变量中,然后进一步使用它们来发送电子邮件。
- 文件可以由任何不常用的字符(如 | ^ 等)或字符组分隔。
- 需要从文件中检索邮件、抄送、密件抄送、主题、正文。
- 我正在从 table 假脱机到文件中,因此定界符可以是任何字符,但在通用英语中较少使用,因为像 , & * 等字符可能出现在 Body 中并且可能 return 错误的值。
文件:(cc 和 bcc 在文件即它们是空白的)
na734@company.com|NA734@company.COM|||TEST EMAIL FOR LMS ERROR|Hi <<FIRST_NAME>>, <br><br>
Following errors are generated during migration of LMS data into FIMS application.<br><br><br>
The respective details of Error(s) occured is logged into the attached file.
Regards,<br>
FIMS Web Application<br><br><br>
This is an auto-generated e-mail, please don't reply to this e-mail
Reply to the following person for further details:
na734@company.com
代码使用:
while IFS='|' read -r a1 a2 a3 a4 a5 a6
do
flag1=`echo $a1`
flag2=`echo $a2`
flag3=`echo $a3`
flag4=`echo $a4`
flag5=`echo $a5`
flag6=`echo $a6`
done < $RUNTIME/EMAIL_$System`date +%y%m%d`.csv
没有设置变量。
并且在使用以下代码时:它显示了不需要的输出:
while IFS='|' read -r a1 a2 a3 a4 a5 a6
do
echo $a1
echo $a2
echo $a3
echo $a4
echo $a5
echo $a6
done < $RUNTIME/EMAIL_$System`date +%y%m%d`.csv
输出:(一堆空行)
na734@company.com
NA734@company.COM
TEST EMAIL FOR LMS ERROR
Hi <<FIRST_NAME>>, <br><br>
Following errors are generated during migration of LMS data into FIMS application.<br><br><br>
The respective details of Error(s) occured is logged into the attached file.
Regards,<br>
FIMS Web Application<br><br><br>
This is an auto-generated e-mail, please don't reply to this e-mail
Reply to the following person for further details:
na734@company.com
在 ksh 中,管道中的最后一个命令在当前 shell 中执行。
我会处理第一行,然后将所有其他行附加到 body
变量。
file="$RUNTIME/EMAIL_$System$(date +%y%m%d).csv"
sed 1q "$file" | IFS="|" read -r from to cc bcc subj body
body="$body
$(sed 1d "$file")"
printf "%s: %s\n" from "$from" to "$to" cc "$cc" bcc "$bcc" subj "$subj" body "$body"
from: na734@company.com
to: NA734@company.COM
cc:
bcc:
subj: TEST EMAIL FOR LMS ERROR
body: Hi <<FIRST_NAME>>, <br><br>
Following errors are generated during migration of LMS data into FIMS application.<br><br><br>
The respective details of Error(s) occured is logged into the attached file.
Regards,<br>
FIMS Web Application<br><br><br>
This is an auto-generated e-mail, please don't reply to this e-mail
Reply to the following person for further details:
na734@company.com
我有时喜欢用sed
代替head/tail
我使用了 cut
命令,将它们分配给变量似乎效果很好。虽然,我不确定您的文件中是否会有多个条目。
Testing.sh
#!/usr/bin/ksh
a1=$(cat test.txt | cut -f1 -d '|' -s)
a2=$(cat test.txt | cut -f2 -d '|' -s)
a3=$(cat test.txt | cut -f3 -d '|' -s)
a4=$(cat test.txt | cut -f4 -d '|' -s)
a5=$(cat test.txt | cut -f5 -d '|' -s)
a6=$(cat test.txt | cut -f6 -d '|')
echo $a1
echo $a2
echo $a3
echo $a4
echo $a5
echo $a6
test.txt
na734@company.com|NA734@company.COM|||TEST EMAIL FOR LMS ERROR|Hi <<FIRST_NAME>>, <br><br>
Following errors are generated during migration of LMS data into FIMS application.<br><br><br>
The respective details of Error(s) occured is logged into the attached file.
Regards,<br>
FIMS Web Application<br><br><br>
This is an auto-generated e-mail, please don't reply to this e-mail
Reply to the following person for further details:
na734@company.com
输出:
$Testing.sh
na734@company.com
NA734@company.COM
TEST EMAIL FOR LMS ERROR
Hi <<FIRST_NAME>>, <br><br> Following errors are generated during migration of LMS data into FIMS application.<br><br><br> The respective details of Error(s) occured is logged into the attached file. Regards,<br> FIMS Web Application<br><br><br> This is an auto-generated e-mail, please don't reply to this e-mail Reply to the following person for further details: na734@company.com