2009-05-14 8 views
2

まず、いくつかの情報開示:私はLinux管理者ではなく、私のLinux管理者はプログラマーではない。mysqlimport、改行、文字エンコーディングについて(私は思うが)

つまり、毎日生成されるテキストファイルをインポートするためにmysqlimportコマンドを実行するcronジョブがあります。私はこのファイルがどのように作成されるかについては何の支配もない。試行錯誤を経て、テキストファイルがWindowsマシン上で生成されることがわかったので、lines-terminated-by引数の場合は\r\nと指定する必要がありました。先週は正常に動作しなくなりました。ファイルがLinuxで生成されたためだと判断しましたので、\nに変更しました。私の理解(完全にはっきりしていない)は、どのプラットフォームとエンコーディングが使用されているかを決定するテキストファイルを誰が生成するかによって異なります。

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

答えて

2

私はあなたが "WindowsのLinuxのエンコーディング間の変換をLinux上でDOS2UNIXやunix2dosといったコマンドを使用することができると思います。そのため、エンコーディングが使用されているかどうかを検出する必要はありません。コマンドを実行して、ファイルのエンコーディングが正しいことを確認してください。

それは、ユーティリティのバージョンによって異なりますが、一般的に、コマンドは次のように実行されます:

dos2unix input.txt output.txt 
dos2unix input.txt > output.txt 
1

fromdosdos2unix、およびtofrodosは時々Linuxシステムにインストールされている三つのプログラムです。これらのうちの1つを使用して、形式をUNIXの行末(\n)に常に変換することができます。

1

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

2

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

このようにして、シェルスクリプトに入力される行末の形式が常に同じになるようにします。

よろしく

関連する問題