2

首先,一些披露:我不是 Linux 管理员,我的 Linux 管理员也不是程序员。

也就是说,我们有一个 cronjob,它运行一个mysqlimport命令来导入每天生成的文本文件。我无法控制或参与如何创建此文件。通过反复试验,我们发现文本文件是在 Windows 机器上生成的,因此对于lines-terminated-by参数我们必须指定\r\n. 上周它停止正常工作,我们确定这是因为该文件现在是在 Linux 中生成的,所以我们将其更改为\n. 我的理解(不完全清楚)是这取决于谁生成了决定使用什么平台和编码的文本文件。

我们有一个执行mysqlimport命令的 shell 脚本。当我们提供正确的编码时,一切都会完美运行。但是由于我们不知道谁将首先创建文本文件,有没有办法确定编码是什么并实现正确的换行符?(并且“编码”在这里是正确的术语吗?)

4

4 回答 4

2

在调用 mysqlimport 之前,您需要对 mysqlimport 正在读取的文件运行 dos2unix 命令。如果提供的文件是在 *nix 系统上生成的,则 dos2unix 会将 Windows 行尾“\r\n”转换为 *nix 行尾“\n”,该文件保持不变。

这样你就可以确保你总是有相同格式的行尾被馈送到你的 shell 脚本。

最好的祝福

于 2009-05-14T14:58:16.043 回答
2

我认为您可以在 linux 上使用 dos2unix 或 unix2dos 命令在“Windows”和 Linux 编码之间进行转换。所以你不必检测使用的是什么编码,只需运行命令以确保文件具有正确的编码。

这取决于实用程序的版本,但通常该命令将像这样执行:

dos2unix input.txt output.txt
dos2unix input.txt > output.txt
于 2009-05-14T14:58:36.243 回答
1

fromdosdos2unixtofrodos是有时安装在 Linux 系统上的三个程序。您可以使用其中一种来始终将格式转换为 unix 行尾 ( \n)。

于 2009-05-14T14:57:30.023 回答
1

在运行 mysqlimport 之前,使用tr从 Windows 行尾删除额外的 \r 可能是最简单的。

于 2009-05-14T14:57:38.273 回答