2016-04-13 8 views
-1

入力:はどのように検索し、UNIXでは "" の間で、交換する

20000000,"xxxxxxxxxxxxx,xxxxxxxxxxx",192.168.3.2 
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 

理想的な結果:私は引用符の間にカンマを取り除くにはどうすればよい

20000000,"xxxxxxxxxxxxxxxxxxxxxxxx",192.168.3.2  
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 

? 引用符の間にカンマのない行もあります。

コンマを内部で削除する必要があります("JUDICIARY, STATE COURTS (STATE COURTS)"(両方の出現は1行で))。

そしてsome linesここでダブル

+1

ようこそStackOverflow。あなたを助けるために、より多くの情報が必要になります。これらのデータはファイル、データベース、オンラインソース、または何ですか?これまでに何を試しましたか? – bitfiddler

+0

"xxxx、xxxx"は7と8のフィールドにあり、区切り記号として "、"が使用されています。私が望むのは、それらが存在し、すべての情報がtxtファイルに格納されている場合にのみ、引用符の中のコンマを削除することです。 –

+0

それを取り除くか、両方とも正常です。 ""ありがとうございます。 –

答えて

1

の間はコンマでいくつかのフィールドを持っているあなたがそれを行うことができる方法のデモスクリプトです - sedgotoの世界へようこそ。これは、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_PPText::CSV_XS)を持っています。 CSVファイルを操作するカスタムツールがあります。

また、マイクロソフトは、マイクロソフトが使用しているもの(最初の近似値)を合理化しようとしているインターネットワールドの試みであるRFC 4180と少し異なる表記をサポートしています。

+1

いつものように、優れた投稿です。正しいツールの使用について同意する。 O.P.に、私はまた、正しいフォーマットされたデータを再作成しようとすることをお勧めします。多くの場合、これが最速の解決策です。皆さんお元気で。 – shellter

+0

助けてくれてありがとう –

関連する問題