僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
DBが吐いたらしいCSVには、フィールドの所々に改行が混ざっている。
sedで処理しようとすると、面倒この上ない。
$ cat hoge.csv
"first","あはは","12345"
"second","いひひ","21345"
"third","うふふ
改行があるぞ","3145"
"fourth","げらげら","13452"
LibreOffice Calcなどに読ませると、ダブルクォーテーションマークが
閉じてないことを認識してくれる。
とはいえ、GUIなツールで非能率にして間違いやすい手作業を何度も
繰り返すのは流石に御免。
読むべきものを読まずに何度も検索して、
同じページを何度も読んで、ようやく。
$ sed '/[^"]$/N;s/\n/ /' hoge.csv
"first","あはは","12345"
"second","いひひ","21345"
"third","うふふ 改行があるぞ","3145"
"fourth","げらげら","13452"
$ cat hoge.csv "first","あはは","12345" "second","うふふ 改行があるぞ","3145" "third","えへへ ここにも改行があるぞ","31 45" "fourth","くすくす ここにも改行が あるぞ","314 5" "fifth","げらげら","13452"
適当に読んだり打ったりしているうちに、 ほとんど偶然にできた。
$ sed -n ':loop; /[^"]$/N;s/\n/_/g; /[^"]$/b loop ;p' hoge.csv "first","あはは","12345" "second","うふふ _改行があるぞ","3145" "third","えへへ_ここにも改行があるぞ","31__45" "fourth","くすくす_ここにも改行が_あるぞ","314_5" "fifth","げらげら","13452"
落とし穴もう一つ。この処理は改行がCRLFだと駄目。
一旦 nkf -d をかけないと。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。