トップ «前の日記(2019-10-28(Mon)) 最新 次の日記(2019-11-05(Tue))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2019-11-02(Sat) 日向は暖かかった

特定行の改行置換

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や内容が変った場合はあしからず。

index.htmlは ここから。