2017-06-16 53 views
0

我有一個像報價爲字符串添加逗號之間的外殼

1,2,A,N,53,3,R,R,^A,-C,-T,2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P 

現在一個字符串,我想實現以下字符串

1,2,A,N,53,3,R,R,"^A,-C,-T",2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P 

所以,我想8日發生後取代一切逗號(,)從12開始到第12次出現comman(,)從最後到引號。

我嘗試了awk的一些選項,但無法實現它。無論如何要完成這件事。

在此先感謝。

回答

1

嘗試:

awk -v s1="\"" -F, '{$9=s1 $9;$(NF-12)=$(NF-12) s1} 1' OFS=, Input_file 

所以在這裏我想提出一個變量,它是「,使現場分隔爲逗號然後我重新創建第9根據您的要求使用s1和$ 9,然後從最後一個字段重新創建第13個字段(在這裏指出沒有字段編號的硬編碼,因此它可能有任意數量的字段),並在當前值的最後加上s1的值。 mentio寧1將打印該行。將OFS(輸出字段分隔符)也設置爲逗號。

1
x='1,2,A,N,53,3,R,R,^A,-C,-T,2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P' 

awk -F, -v OFS=, -v q='"' '{$9=q $9;$11=$11 q}1' <<< "$x" 
1,2,A,N,53,3,R,R,"^A,-C,-T",2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P 

說明:這裏FSOFS被設置爲逗號作爲輸入流是CSV.double報價被存儲於命名爲q變量。然後,更改所需列的值以獲得所需的結果。您可以更改列的值以獲得任何其他結果。

對於文件:

awk -F, -v OFS=, -v q='"' '{$9=q $9;$11=$11 q}1' inputfile 
+0

因此,如果我將它作爲txt文件傳遞,它將以相同的方式工作,而不是將字符串分配給變量。正如想知道是否有多條線路一起傳遞。 – user2854333

+0

是的,它會工作。 .... –

+1

很酷..謝謝 – user2854333

1
$ awk -v FS=',' -v OFS=',' '{$9="\"" $9;$11=$11"\""; print}' your_file 
1,2,A,N,53,3,R,R,"^A,-C,-T",2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P 
0

這可能爲你工作(GNU SED):

sed 's/,/&"/8;s/,/"&/11' file 

插入"'八不過午。

0
awk '{sub(/\^A,-C,-T/,"\42^A,-C,-T\42")}1' file 

1,2,A,N,53,3,R,R,"^A,-C,-T",2,S,9,l,8,8Z,sl,138Z,l,Y,75680,P 

這裏的優點是要脫掉插入符號。