次のCSVファイルがあります。
1st,2nd,3rd,4th,5th,6th,7th
"first-line
",2,3,4,5,6,7
"second-line
",2,3,4,5,6,7
"third-line
",2,3,4,5,6,7
"normal-line",2,3,4,5,6,7
"forth-line
",2,3,4,5,6,7
"fifth-line
",2,3,4,5,6,7
最初の列の閉じた引用符の前に改行文字を挿入すると、行が壊れているように見えます。対応する改行文字を削除したい。
私は次の解決策を使用しました。この回答ただし、テキストに正しい行(タイトルや「一般行」など)があると、混乱が発生します。
行がダウンしていない場合でもこれを行う方法はありますか?
ベストアンサー1
新しい回答(2022年10月)、使用ミラー最初の列から末尾のスペースを削除します。
$ mlr --csv put '$["1st"] = rstrip($["1st"])' file
1st,2nd,3rd,4th,5th,6th,7th
first-line,2,3,4,5,6,7
second-line,2,3,4,5,6,7
third-line,2,3,4,5,6,7
normal-line,2,3,4,5,6,7
forth-line,2,3,4,5,6,7
fifth-line,2,3,4,5,6,7
元の引用を維持してください。
$ mlr --csv --quote-original put '$["1st"] = rstrip($["1st"])' file
1st,2nd,3rd,4th,5th,6th,7th
"first-line",2,3,4,5,6,7
"second-line",2,3,4,5,6,7
"third-line",2,3,4,5,6,7
"normal-line",2,3,4,5,6,7
"forth-line",2,3,4,5,6,7
"fifth-line",2,3,4,5,6,7
場所ではなく名前で列を使用していることに注意してください。
以前の回答(2022年6月):
データにその文字が含まれていない@
(そうでない場合は使用されていない他の文字に変更)、含まれているすべての改行を削除したいとします。
$ csvformat -M @ file.csv | tr -d '\n' | tr '@' '\n'
1st,2nd,3rd,4th,5th,6th,7th
first-line,2,3,4,5,6,7
second-line,2,3,4,5,6,7
third-line,2,3,4,5,6,7
normal-line,2,3,4,5,6,7
forth-line,2,3,4,5,6,7
fifth-line,2,3,4,5,6,7
これは以下を使用します。csvformat
csvkitから@
改行文字の代わりにレコードターミネータとして使用されるデータストリームとしてCSVファイルの形式を再指定します。変換されたデータにまだ存在する改行は、tr
後続のコマンドによって削除されます。
次に、2回目の呼び出しで一時レコードの終端を改行文字に戻しますtr
。
引用符が必要なフィールドは、出力から引き続き引用されます。