【发布时间】:2016-11-03 06:01:12
【问题描述】:
我正在尝试使用 shell 脚本读取 csv 文件,使用以下命令。
cat file.csv | while read -r a b c d e f; do echo "$a:$b:$c:$d:$e:$f"; done
当我运行这个命令时,文件中的第一列没有被正确读取。
例如:如果第一列的内容是
number1,
number2,
number3,
number4,
(so on)
它输出:
::::er1,
::::er2,
::::er3,
::::er4,
一些字符被替换为':' 这只发生在第一列的内容上。我哪里错了?
【问题讨论】:
-
在我看来,您在 Unix 机器上具有 DOS 样式的 CRLF 行尾。
-
@JonathanLeffler:
IFS的 not 设置不是造成了这里的问题吗? -
也是这样,但是行首的冒号向我表明,有一个 CR 作为数据的一部分保存(因为 Unix 行以 LF 结尾;CR 只是一个行字符)。所以,是的 - IFS 可能是问题的一部分,但数据可能来自 Windows,或者在某个时候通过 Windows 机器传输。