2017-06-15 3 views
0

awkコマンドが初めてで、パイプを含むデータがあり、これらのパイプをカンマで置き換えます。以下のデータサンプルは、awkコマンドで私を助けてください私の出力は私が私awkコマンドを使用して二重引用符で囲まれたcsvファイルのパイプをカンマに置き換えます。

awk -F"\"" 'BEGIN{OFS="\""}{for(i=1;i<=NF;++i){ if(i%2==0) gsub(/|/, ",", $i)}} {print $0}' file 

のために動作しませんでした以下のコマンドを試してみました

"PT3QB789TSUIDF371261","THE TORONTO,DOMINION BANK","2016-05-24T00:36:42Z","ANZ BANK NEW, ZEALAND LIMITED","HZSN7FQBPO5IEWYIGC72","MAS,CA.ON.OSC,ASIC*,AAAA" 
"PT3QB789TSUIDF371261","ABC,XYZ,123","2016-05-24T00:36:42Z","ANZ BANK NEW ZEALAND LIMITED","HZSN7FQBPO5IEWYIGC72","MAS,CA.ON.OSC,ASIC*" 

としてのようになります

"PT3QB789TSUIDF371261","THE TORONTO|DOMINION BANK","2016-05-24T00:36:42Z","ANZ BANK NEW| ZEALAND LIMITED","HZSN7FQBPO5IEWYIGC72","MAS|CA.ON.OSC|ASIC*|AAAA" 
"PT3QB789TSUIDF371261","ABC|XYZ|123","2016-05-24T00:36:42Z","ANZ BANK NEW ZEALAND LIMITED","HZSN7FQBPO5IEWYIGC72","MAS|CA.ON.OSC|ASIC*" 

です。ありがとう

+1

シンプル 'sedの年代/ | /、/ G 'file'与えられたサンプルのために尽くします...他の理由は、なぜあなたが使用している' awk'を? – Sundeep

+0

あなたのコマンドに関する1つの問題は '/ | /' ... '' 'はメタ文字なので、'/\ |/'にする必要があります – Sundeep

+0

なぜですか?コマンドラインツールを使用すると、フィールド内のカンマとフィールド間のカンマを区別するための追加ロジックが必要になるため、後で他の作業を行うことが難しくなります。 –

答えて

0

あなたは、あなたが試すことができAWKを使用しないことを選択したことができれば、この -

のsed -iさん/ theOriginalChar/theNewChar/G 'theFile.txt

あなたはawk- 通知を使用する必要がある場合垂直バー(|)によって正規表現が許可されること |あなたの例では、|の前に\を追加する必要があります。

1

あなたはsedのいずれかで、カンマにすべてのパイプを変更する場合:

sed -i 's/|/,/g' file.txt 

またはTR:

tr \| , <file.txt> file1.txt 

しかし...あなたは本当にAWKを使用したい場合、私は何かを試してみましたこのように(今それをテストすることはできません):

awk -F\| 'BEGIN{OFS=","} {$1=$1; print}' file.txt > file1.txt 
関連する問題