各フィールドがコンマで区切られた以下のファイルがあります。 5番目のフィールド("txt4 "(tst)""
)を変更し、"
2つの外部引用符を除いて、そのフィールドのすべての項目をに置き換える必要がありますchr(34)
。つまり、最後のフィールドはに変換する必要があります"txt4 chr(34)(tst)chr(34)"
。実際のデータには、ここに示されているフィールドよりも多くのフィールドを含めることができるため、ソリューション内の特定のフィールドをリストすることは非現実的です。
以下の出力を取得するには、awkを使用する必要があります。
サンプルcsvファイル:
"this is txt1","this is txt2",3,"this txt3","txt4 "(tst)""
希望の出力:
"this is txt1","this is txt2",3,"this txt3","txt4 chr(34)(tst)chr(34)"
ベストアンサー1
データのソースまたは予想される形式については実際にはあまり話しません。練習を「replace with "(
」または「replace with」に再構成できる場合は、次の2つのコマンドを使用できます。chr(34)(
")
)chr(34)
"(tst)"
chr(34)(tst)chr(23)
sed
$ sed -e 's/"(/chr(34)(/' -e 's/)"/)chr(34)/' file
"this is txt1","this is txt2",3,"this txt3","txt4 chr(34)(tst)chr(34)"
$ sed 's/"\((tst)\)"/chr(34)\1chr(34)/' file
"this is txt1","this is txt2",3,"this txt3","txt4 chr(34)(tst)chr(34)"
最後のフィールドの形式が正しくないため、テキストをCSVレコードに解析できません。このフィールドの正しく引用されたバージョンは次のとおりです"txt4 ""(tst)"""
。