2014-03-28 40 views
3

我的数据:AWK:字段分隔符为双管以上

-1||"A|AA"||[email protected] 
-10||"B ||B|ttB||b|| [email protected] 
-7||C||c 

我想用逗号交换双管分隔符||,这样的:

awk -F'||' -v OFS="," '{$1=$1} 1' 2.txt 

但输出仍是相同。 相反的情况(逗号和双管),然而,工作原理:

awk -F"," -v OFS="||" '{$1=$1} 1' 1.txt 

我在做什么错?

+0

哪里是第2行收盘报价? –

回答

9

你需要躲避管道符号:

awk -F '[|][|]' -v OFS="," '{$1=$1}1' 
+0

Downvotes?真? –

+1

+1:希望这将补偿虽然得到一个downvote一个良好的工作解决方案是令人沮丧的。 –

4

你需要逃跑元字符像|或字符类使用它们,使它们被认为是文字。他们被认为是符合逻辑的OR没有逃生的符号。试试这个:

$ awk -F'[|][|]' -v OFS="," '{$1=$1} 1' data 
-1,"A|AA",[email protected] 
-10,"B ,B|ttB,b, [email protected] 
-7,C,c