CSVファイルの特定の列から改行を削除する方法は?

CSVファイルの特定の列から改行を削除する方法は?

改行をレコード区切り文字として使用する150を超える列を含むCSVファイルがあります。問題は、列の1つに改行文字が含まれることです。そのためには、これらを削除したいと思います。

入力する:

001|Baker St.
London|3|4|7
002|Penny Lane
Liverpool|88|5|7

出力:

001|Baker St. London|3|4|7
002|Penny Lane Liverpool|88|5|7

ベストアンサー1

sed現在の行に4文字が含まれていない場合は、|次の行を現在の行にマージできます。

<file sed -e :1 -e 's/|/|/4;t' -e 'N;s/\n/ /;b1'

一部のsed実装では、ファイルを所定の位置にあるか編集することができます(-i元のファイルを拡張子として保存するため)、これを使用して次のことができます。-i ''-i.back.back

sed -i -e :1 -e 's/|/|/4;t' -e 'N;s/\n/ /;b1' ./*.csv

csv現在のディレクトリに隠されていないすべてのファイルを編集します。

コメントと同じ:

<file sed '
   :1
     s/|/|/4; # replace the 4th | with itself. Only useful when combined with
              # the next "t" command which branches off if the previous
              # substitution was successful
     t
     # we only reach this point if "t" above did not branch off, that is
     # if the pattern space does not contain 4 "|"s
     N; # append the next line to the pattern space
     s/\n/ /; # replace the newline with a space

   # and then loop again in case the pattern space still does not contain
   # 4 "|"s:
   b1'

おすすめ記事