0

我从 ftp 服务器收到了一个 csv 文件,我正在将其摄取到表中。在摄取文件时,我收到错误“文件是被截断的文件”

实际原因是文件中的数据在行尾包含 $ 和 ^M$。例如:

ACT_RUN_TM、PROG_RUN_TM、US_HE_DT* ^M$ * "CONFIRMED","","3600" $

如何使用 linux 命令从行尾删除这些 $ 和 ^M$。

4

2 回答 2

3

最终正确的解决方案是以文本模式而不是二进制模式从 FTP 服务器传输文件,这会为您进行适当的行尾转换。更改您的下载脚本或 FTP 应用程序配置以启用文本传输以在将来解决此问题。

假设这是一次性传输并且您已经下载了文件并且只想修复它,您可以使用 tr(1) 来翻译字符。因此,要从文件中删除所有control-M 字符,您可以通过tr -d '\r'. 或者,如果你想用 control-J 替换它们——例如,如果文件来自预 OSX Mac 系统,你会这样做——做tr '\r' '\n'.

于 2012-10-23T14:10:12.347 回答
0

看到 ^M 不是最后一个字符很奇怪,但是:

sed -e 's/^M*\$$//g' <坏文件>好文件

或使用“sed -i”就地更新。(注意,“^M”是在命令行中按 键输入的CTRL-V CTRL_M)。

更新: 已确定问题是错误的,因为“^M$”不在文件中,而是与 VI 一起显示。他实际上想将 CRLF 对更改为 LF。

sed -e 's/^M$//g' <坏文件>好文件

于 2012-10-23T13:44:25.100 回答