改行をレコード区切り文字として使用する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'