複数行の値とキャリッジリターンでCSVを解析します。

複数行の値とキャリッジリターンでCSVを解析します。

CSVファイルがあり、sed次の1行のコードを使用して二重引用符の値を削除しようとしています。これについての詳細は、私が見ることができます。それを見つけるためのオリジナルの投稿

sed -i.bak 's/^"//g;s/","/,/g;s/"$//g' $1 

今はこれがほとんど動作しますが、私のエクスポートの1つに問題があります。複数行があり、キャリッジリターンで区切られているようです。これはデータの証拠のサンプルです

$ cat -v Quote.csv

"Id","Blob","Employee","Etc"^M
"0Q01N000001MxPbSAK","Job to happen late day/ evening", "Employee 1", "more stuff"^M
"0Q01N000001N4klSAC","Daytime work during normal businesses hours ^M
some details ^M
some more details ^M
conclusion","Employee 2", "more stuff"%

ファイル全体に対してこれを実行しようとすると、次のエラーが発生します。

CSV error: record 2 (line: 4, byte: 101): found record with 2 fields, but the previous record has 4 fields

私はこれがExcelで「大丈夫に見えますが」列と行の並べ替えが歪んでいるためだと思います。

この問題を解決するためにこれを正しく解析する方法についてのアイデアはありますか? CSVをArangoDBにインポートするときに値を正しく入力できるように、二重引用符を削除する必要があります。

他のフォーラムを探す本質的に同じ問題であり、提案された解決策です。

sed 's/$/~/' Quote.csv |tr '\n' ' '   |sed 's/~ "KEY-/\n"KEY-/g'

私のドメインに合わせてリバースエンジニアリングできるなら、IDおそらく効果があると思います。また、文字があることがわかりましたが、文字も削除する必要があるかどうか<br>わかりません。tr(予想される改行が表示された場合、データはめちゃくちゃになりそうです。)

ベストアンサー1

出力の実際の問題は、\r\n 2 つのレコードの終わりとセル内にキャリッジ戻り文字があることです。

代わりに、正しいCSVは次のようになります。

ここに画像の説明を入力してください。

上記のような結果が出るように出力を生成するプロセスを修正し、それをMillerの例で使用すると、http://johnkerl.org/miller/docそしてsed

tail -n +2 input.csv | \ mlr --implicit-csv-header --rs '\r\n' --icsvlite --ocsv put '$2=gsub($2,"\n"," ")' then label Id,Blob,Employee,Etc | \ sed 's/"//g'

あなたは出力を得るでしょう

Id,Blob,Employee,Etc 0Q01N000001MxPbSAK,Job to happen late day/ evening,Employee 1,more stuff 0Q01N000001N4klSAC,Daytime work during ... details conclusion,Employee 2, more stuff

おすすめ記事