2017-06-15 140 views
0

我是awk命令的新手,我有其中包含管道的數據,我想用逗號替換這些管道。下面是數據樣本使用awk命令替換雙引號csv文件中的管道使用逗號

"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*" 

我想下面的命令,沒有工作對我來說

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

請幫我awk命令。謝謝我提前。

+1

一個簡單的'sed的 'S/| /,/ G' file'會爲給定的樣本做..任何其他理由,爲什麼你正在使用'awk'? – Sundeep

+0

你的命令的一個問題是'/ | /'...'|'是元字符,所以它應該是'/ \ | /' – Sundeep

+0

爲什麼?這會讓你的文件很難用命令行工具做任何事情,因爲它們需要額外的邏輯來區分字段之間的逗號和字段之間的逗號。 –

回答

0

,如果你可以選擇不使用AWK,那麼你可以試試這個 -

的sed -i 'S/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