我在使用这个for循环时遇到了麻烦。如果我在一个单独的行上回显每个变量,它的行为就像预期的那样,但无论出于何种原因,我都无法在同一行上回显它们。这是代码的片段,最终被送入MySQL的INSERT语句。
for work in $(find "$INCOMINGDIR" -type f -name *.txt)
do
#First, extract metadata from zip and load as variable:
INFO=$(unzip -c "${work%*.txt}".zip master.nfo)
#Next, parse out the desired text:
REP=$(echo "$INFO" | grep "Rep Name" | awk -F'=' '{print $2}')
LNAME=$(echo "$INFO" | grep "Last Name" | awk -F'=' '{print $2}')
FNAME=$(echo "$INFO" | grep "First Name" | awk -F'=' '{print $2}')
PKGNAME=$(echo "${work%*.txt}".zip | sed 's/.*\///')
echo "$PKGNAME" "$LNAME" "$FNAME" "$REP"
done
目前,这是输出:
jmartin2917_49b79545-3816-475e-9a57-c238f0f3cb47.zip DOE
^这个空间在那里。此外,jmartin = $ REP,$ PKGNAME被截止,$ FNAME缺失。
以不同的方式回收,按相同的顺序导致:
CDC1000_042917_49b79545-3816-475e-9j57-c238f0f3cb47.zip
DOE
JANE
jmartin
所以,预期的结果是:
CDC1000_042917_49b79545-3816-475e-9j57-c238f0f3cb47.zipDOEJANEjmartin
有关如何识别输入文件是否导致问题的任何建议?我将解压缩重定向到文本文件并使用nano打开它,并且没有看到异常字符或异常格式。非常奇怪的是,如果我做了类似的事情,比如说丢弃$ REP,格式会以不同的方式出现乱码:
JANE0_042917_49b79545-3816-475e-9a57-c238f0f3cb47.zip DOE
不知何故,这些都在踩到对方。很困惑。
答案 0 :(得分:0)
好的,想通了......使用在Windows中创建的文件的乐趣。使用file命令输出有关它的信息提供:
incoming$ file master.nfo
master.nfo: ASCII text, with CRLF, LF line terminators
unzip -c "${work%*.txt}".zip master.nfo > "$INCOMINGDIR"/"${work%*.txt}"_master.nfo && dos2unix "$INCOMINGDIR"/"${work%*.txt}"_master.nfo
INFO=$(cat "$INCOMINGDIR"/"${work%*.txt}"_master.nfo)
同一行上的多个变量现在正在运行。在使用文本文件测试线路终止时,只需另一个提示,以防它来自Windows。