shellscript:读取csv并打印为字符串无法正常工作

时间:2019-10-08 20:30:24

标签: shell

我正在读取单单元csv文件,并将该值打印为字符串,并附加了一些其他字符串。它不适用于某些组合。你知道为什么吗?

 while IFS="," read ts
 do
     echo "timestamp is: $
     tstamp=$ts
 done < timestamp.csv

 a="TS_"
 c="234"
 b=".log"
 d="${a}${c}${b}"
 Log_1="${a}$tstamp"
 Log_2="${tstamp}${a}"
 echo "$d"
 echo "$Log_1"
 echo "$Log_2"

实际结果:

timestamp is: 0x5cff71d8

TS_234.log

TS_0x5cff71d8

TS_cff71d8

预期结果:

timestamp is: 0x5cff71d8

TS_234.log

TS_0x5cff71d8

0x5cff71d8TS_

1 个答案:

答案 0 :(得分:1)

该CSV文件是在Windows计算机上制作的,每行以CR('\r''\x0D')字符结尾,后跟LF('\n''\x0A')字符;您正在Linux,Unix或MacOS机器上读取文件,该机器的行应该以裸露的LF字符结尾。

CR是回车符:打印此字符会将光标移回行首。

您的$Log_2变量包含0 x 5 c f f 7 {{1} } 1 d 8 \r T S,在打印时看起来像_

TS_cff71d8(现在光标移回该行的开头)
0x5cff71d8\r(覆盖前三个字符)

要进行检查,请尝试TS_(或echo "$Log_2" | od -A x -t x1z -v的任何选项都可以在您的系统上使用)。

要摆脱MS-DOS类的CR字符,您的系统上可能有一个名为dos2unix的实用程序;或者您可以尝试od