Bash将文本文件存储为变量并在同一行上输出多个变量

时间:2015-12-24 05:34:27

标签: bash

我在使用这个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

不知何故,这些都在踩到对方。很困惑。

1 个答案:

答案 0 :(得分:0)

好的,想通了......使用在Windows中创建的文件的乐趣。使用file命令输出有关它的信息提供:

incoming$ file master.nfo 
master.nfo: ASCII text, with CRLF, LF line terminators
anishsane走在正确的轨道上。修改脚本以写入临时文件,然后运行dos2unix以从CRLF转换为LF(unix行终止),具体如下:

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。