我正在读取单单元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_
答案 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
。