美好的一天。
尝试制作一个逐行读取文件的脚本,并获取由“;”分隔的所述行的第6个字段我收到以下消息:
$MID = time() .'-' . md5('xxx@gmail.com' . 'yyy@gmail.com') . '@domain.com';
$mail->MessageID = $MID;
files.txt行如下所示
/directory/file.txt: line 1: syntax error near unexpected token `;;'
/directory/file.txt: line 1: `name;123456789;middlename;01/01/2017;9876543210;555555555555;product;;;'
最后一个“;”是因为文本文件是从excel文件复制的,后来转换为dos2unix的unix格式。当我从脚本中使用cut命令时,我得到了我想要的东西,但是如果我在下面的循环中使用它,我会收到错误消息:
name;123456789;middlename;01/01/2017;9876543210;555555555555;product;;;
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:2)
有效地解决代码的一切都是错误的。
=
for
无法打开文件并对其内容进行迭代$
运算符扩展参数;否则,它们只是文字字符串。一个简单的工作示例:
file="/directory/file.txt"
while IFS= read -r line; do
printf '%s' "$line" | cut -d";" -f6
done < "$file"
正确使用while
循环后,您可以使用read
命令为您进行字段分割;不需要cut
:
while IFS=";" read -r f1 f2 f3 f4 f5 f6 frest; do
echo "$f6"
done < "$file"
使用数组可以缩短它,但会使您的代码不符合POSIX。
while IFS=";" read -ra f; do
echo "${f[5]}"
done < "$file"