2

まず、いくつかの開示: 私は Linux 管理者ではなく、私の Linux 管理者はプログラマーではありません。

mysqlimportとはいえ、毎日生成されるテキスト ファイルをインポートするコマンドを実行する cron ジョブがあります。このファイルがどのように作成されるかについて、私は制御も関与もしていません。試行錯誤の結果、テキスト ファイルが Windows マシンで生成されていることが判明したため、lines-terminated-by引数には を指定する必要があり\r\nました。先週、正しく動作しなくなりましたが、ファイルが現在 Linux で生成されていることが原因であると判断したため、単に\n. 私の理解 (完全には明確ではありません) は、使用されるプラットフォームとエンコーディングを決定するテキスト ファイルを誰が生成するかに依存するということです。

コマンドを実行するシェルスクリプトがありますmysqlimport。正しいエンコーディングを提供すると、すべてが完全に機能します。しかし、そもそも誰がテキスト ファイルを作成するのかわからないので、エンコーディングが何であるかを判断し、適切な改行文字を実装する方法はありますか? (「エンコーディング」は適切な用語ですか?)

4

4 に答える 4

2

mysqlimportを呼び出す前に、mysqlimportが読み取っているファイルに対してdos2unixコマンドを実行する必要があります。dos2unixは、提供されたファイルが* nixシステムで生成された場合、Windowsの行末「\ r\n」を*nix行末「\n」に変換します。ファイルは変更されません。

そうすることで、シェルスクリプトに常に同じ形式の行末がフィードされるようになります。

よろしくお願いします

于 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

fromdos、、dos2unixおよびtofrodosは、Linuxシステムにインストールされることがある3つのプログラムです。これらのいずれかを使用して、フォーマットを常にUNIXの行末(\n)に変換できます。

于 2009-05-14T14:57:30.023 に答える
1

mysqlimportを実行する前に、 trを使用してWindowsの行末から余分な\rを削除するのがおそらく最も簡単です。

于 2009-05-14T14:57:38.273 に答える