LOADDATAINFILEを介してMysqlにロードしたいパイプ区切りのデータファイルがあります。
何かのようなもの:
a|||d|e
x|y|z|0|1
...
空のフィールドをに置き換え\N
て、データがNULL値として認識されるようにします。
やって
sed's / || / | \\ N | / g'
ほとんど機能しますが、完全ではありません-その最初のデータ行では、2番目のパイプがsedによって消費され、2番目の連続する空のフィールドが解析されません!!!
私のハッキーな回避策は、最初のsedの結果をパイプ処理して別の同一の検索を実行し、2回目に置き換えて、これらの連続する空のフィールドを削除することです。
私の質問は、sedで(できれば1回のパスで)この問題を回避するためのよりエレガントな方法は何ですか?
TIA。
追記
sedを使用してデータファイルを処理する場合は、次のような行末の場合にも注意してください。
h | i | j | k |
にパイプする必要があります
sed's / | $ / | \\ N / g'
それらの行末のケースを処理します。
また、DOSからUNIXシステムに移行する場合は、sedの検索と置換を使用してデータファイルから「\r」を消去することをお勧めします。
LOAD DATA INFILEを使用するときは、Mysqlからのすべての警告を考慮することをお勧めします。これらの警告は、悪意のあるケースを見つけるのに役立ちます。