sedを使用して、.csvファイルをクリーンアップし、いくつかの不正なコンマと不正な引用符(不正な、これらのファイルの変換に使用する社内プログラムを壊すことを意味します)を削除するスクリプトを作成しました。
# remove all commas, and re-insert the good commas using clean.sed
sed -f clean.sed $1 > $1.1st
# remove all quotes
sed 's/\"//g' $1.1st > $1.tmp
# add the good quotes around good commas
sed 's/\,/\"\,\"/g' $1.tmp > $1.tmp1
# add leading quotes
sed 's/^/\"/' $1.tmp1 > $1.tmp2
# add trailing quotes
sed 's/$/\"/' $1.tmp2 > $1.tmp3
# remove utf characters
sed 's/<feff>//' $1.tmp3 > $1.tmp4
# replace original file with new stripped version and delete .tmp files
cp -rf $1.tmp4 quotes_$1
ここにclean.sedがあります:
s/\",\"/XXX/g;
:a
s/,//g
ta
s/XXX/\",\"/g;
次に、一時ファイルとビオラを削除します。他のプロセスで使用できる「quotes」という単語で始まる新しいファイルがあります。
私の質問は
、その一時ファイルのfeffタグを削除するためにsedステートメントを作成する必要があるのはなぜですか?元のファイルにはありませんが、常に置換ファイルに表示されます。最初はcpがこれを引き起こしていると思いましたが、cpの前にsedステートメントを入れて削除すると、そこにはありません。
多分私は何かが足りないだけです...