の間はコンマでいくつかのフィールドを持っているあなたがそれを行うことができる方法のデモスクリプトです - sed
にgoto
の世界へようこそ。これは、BSD sed
を使って書かれています。-E
を使って拡張正規表現を有効にします。 GNU sed
は同じタスクに対して-r
を使用します。
sed -E -e 's/^/A: /p; s/^A: /B: /' \
-e ':again' \
-e 's/^(([^"]*|"[^",]*")*)("[^"]*),([^"]*")/\1\3\4/' \
-e 't again' \
data
データがdata
と呼ばれるファイルであると仮定すると。最初の-e
は、単にプレフィックスがA:
の元の入力をエコーし、接頭辞をB:
に変更します。これはデバッグ用の資料です。 2番目の-e
はジャンプ可能なラベルagain
となります。 4番目の-e
は、前のステップで置換が行われた場合はagain
ラベルにジャンプします。
すべての興奮は、第3の-e
にあります。このパターンは、行の先頭を検索し、シーケンス「二重引用符ではない」または「二重引用符に続けて0個以上の '二重引用符ではない」と二重引用符二重引用符ではなく、二重引用符ではなく、コンマ、さらに二重引用符ではない二重引用符で囲んでください。これは接頭辞、二重引用符間のカンマの前の部分、二重引用符間のカンマの後の部分で置き換えられます。
は、データファイルを考える:
2000,"xxxx,xxxx",192.168.3.2
2000,"xx,xx,xx",192.16.3.2
2000,"xxxxxxxx",192.168.3.2
20000000,"xxxxxxxxxxxx,xxxxxxxxxxxx",192.168.3.2,"yyyyy,yyyyy"
20000000,"xxxxxxxxxxxxx,xxxxxxxxxxx",192.168.3.2
20000000,"xxxxxxxxxxxxxxxxxxxxxxxx",192.168.3.2
201,"x,x",192.168.3.2,"y,y","aaaa,cccc,dddd",192,"zzzz",234
201,"x,x",192.168.3.2,"yyy"
201,"xx",192.168.3.2,"yyy",2211
201,"xxx",192.168.3.2,"y,y"
201,"xxx",192.168.3.2,"yyy"
201,"x,x",192.168.3.2,"y,y"
Exchange subsidary,Passed,00021423SNG,R-JAM-05-03,US (First Exchange),20000000,"JUDICIARY, STATE COURTS (STATE COURTS)",112.78.212.12/30,00052312SNG,R-JPODIU-023-07,US (First Exchange) ,20000000,"JUDICIARY, STATE COURTS (STATE COURTS)",112.78.224.213/30
スクリプトが出力を生成します。
A: 2000,"xxxx,xxxx",192.168.3.2
B: 2000,"xxxxxxxx",192.168.3.2
A: 2000,"xx,xx,xx",192.16.3.2
B: 2000,"xxxxxx",192.16.3.2
A: 2000,"xxxxxxxx",192.168.3.2
B: 2000,"xxxxxxxx",192.168.3.2
A: 20000000,"xxxxxxxxxxxx,xxxxxxxxxxxx",192.168.3.2,"yyyyy,yyyyy"
B: 20000000,"xxxxxxxxxxxxxxxxxxxxxxxx",192.168.3.2,"yyyyyyyyyy"
A: 20000000,"xxxxxxxxxxxxx,xxxxxxxxxxx",192.168.3.2
B: 20000000,"xxxxxxxxxxxxxxxxxxxxxxxx",192.168.3.2
A: 20000000,"xxxxxxxxxxxxxxxxxxxxxxxx",192.168.3.2
B: 20000000,"xxxxxxxxxxxxxxxxxxxxxxxx",192.168.3.2
A: 201,"x,x",192.168.3.2,"y,y","aaaa,cccc,dddd",192,"zzzz",234
B: 201,"xx",192.168.3.2,"yy","aaaaccccdddd",192,"zzzz",234
A: 201,"x,x",192.168.3.2,"yyy"
B: 201,"xx",192.168.3.2,"yyy"
A: 201,"xx",192.168.3.2,"yyy",2211
B: 201,"xx",192.168.3.2,"yyy",2211
A: 201,"xxx",192.168.3.2,"y,y"
B: 201,"xxx",192.168.3.2,"yy"
A: 201,"xxx",192.168.3.2,"yyy"
B: 201,"xxx",192.168.3.2,"yyy"
A: 201,"x,x",192.168.3.2,"y,y"
B: 201,"xx",192.168.3.2,"yy"
A: Exchange subsidary,Passed,00021423SNG,R-JAM-05-03,US (First Exchange),20000000,"JUDICIARY, STATE COURTS (STATE COURTS)",112.78.212.12/30,00052312SNG,R-JPODIU-023-07,US (First Exchange) ,20000000,"JUDICIARY, STATE COURTS (STATE COURTS)",112.78.224.213/30
B: Exchange subsidary,Passed,00021423SNG,R-JAM-05-03,US (First Exchange),20000000,"JUDICIARY STATE COURTS (STATE COURTS)",112.78.212.12/30,00052312SNG,R-JPODIU-023-07,US (First Exchange) ,20000000,"JUDICIARY STATE COURTS (STATE COURTS)",112.78.224.213/30
は注意してください:これは難しいです。オプションがある場合は、CSV形式を認識しているツールを使用してください。たとえば、PythonにはCSVモジュールが付属しています。 Perlはこれを扱うことができるText::CSV
(そして補助モジュールText::CSV_PP
とText::CSV_XS
)を持っています。 CSVファイルを操作するカスタムツールがあります。
また、マイクロソフトは、マイクロソフトが使用しているもの(最初の近似値)を合理化しようとしているインターネットワールドの試みであるRFC 4180と少し異なる表記をサポートしています。
ようこそStackOverflow。あなたを助けるために、より多くの情報が必要になります。これらのデータはファイル、データベース、オンラインソース、または何ですか?これまでに何を試しましたか? – bitfiddler
"xxxx、xxxx"は7と8のフィールドにあり、区切り記号として "、"が使用されています。私が望むのは、それらが存在し、すべての情報がtxtファイルに格納されている場合にのみ、引用符の中のコンマを削除することです。 –
それを取り除くか、両方とも正常です。 ""ありがとうございます。 –