csv区切り文字が値に表示された場合はどうすればよいですか?

csv区切り文字が値に表示された場合はどうすればよいですか?

私のCSVファイルに次のものが含まれているとしましょう。

"item_name","price","description"
mobile,500$,It has many features (e.g., camera, big display, etc)  

mysqlコマンドを使用してmysqlデータベースにこのcsvデータファイルをロードしたいと思います。

load data local infile 'file.csv' into table table
 fields terminated by ','
 lines terminated by '\n'
 (column1, column2, column3,...)  

mysqlとオプションを使用して"各値を囲むこともできます。enclosed by '"'しかし、すべての値を含めることは私にとって負担になります。

descriptionこのタイプのcsv(すべての列ではなく1つの列を含む)を読み取ることができるソリューションがある場合は、値のみを含めることができます"

答え1

フィールド区切り文字をコンマからファイルにないものに変更します。 CSVファイルが生成されるターゲットを制御できる場合、それは難しくありません。

そしてcsvkit、最後のフィールドが正しく引用されたら、これを行うことができます。

$ cat file.csv
"item_name","price","description"
mobile,500$,"It has many features (e.g., camera, big display, etc)"

$ csvformat -D@ file.csv
item_name@price@description
mobile@500$@It has many features (e.g., camera, big display, etc)

あるいは、そのエントリがない場合は、各行csvformatの最初の2つのコンマが実際の区切り文字であると想定します。

$ sed -e 's/,/@/' -e 's/,/@/' file.csv

最後のフィールドを引用する必要はありません。

新しいファイルにリダイレクトしてから使用してください。

load data local infile 'newfile.csv' into table table
 fields terminated by '@'
 lines terminated by '\n'
 (column1, column2, column3,...)  

答え2

私はそれを呼ぶ複合地域私は個人的にエンコーディングを好みますbase64

$ echo "It has many features (e.g., camera, big display, etc)"  | base64
SXQgaGFzIG1hbnkgZmVhdHVyZXMgKGUuZy4sIGNhbWVyYSwgYmlnIGRpc3BsYXksIGV0YykK

しかし、そうすれば確かに長所と短所があります。

関連情報