2013-09-25 47 views
0

我有一個文件,其中有數百行,每行都有一組帶有分隔符的字符,如下所示。使用awk搜索和替換

T01~T02~T03~T04~T05~T06~T07~T08~T09~T10~T11~~T13 
. 
. 
. 
. 

我需要使用awk刪除T02,T11和T12。如果你看到上面的字符串的T12爲null,但我仍需要清空那個位置,我的輸出應該是這樣的:

T01~T03~T04~T05~T06~T07~T08~T09~T13 

我曾嘗試以下awk命令

awk -F~ '{$2=$11=$12="";print $0}' 

,但它給了像

T01 T02 T03 T04 T05 T06 T07 T08 T09 T10 T11 T13 

輸出任何人都可以請讓我知道如果我錯過了什麼..

+0

'切-d〜-f 1,3-9,13' – jon

回答

2

你需要OFS,還可以更改print $01

awk -F~ '{$2=$11=$12=""} gsub(/~+/,"~")' OFS="~" 
T01~T03~T04~T05~T06~T07~T08~T09~T10~T13 
+0

不夠。他想擺脫那些被刪除的領域之間的分隔符。嘗試'gsub()',如:'gsub(/〜+ /,「〜」)' – Birei

0

您還需要改變輸出字段分隔符:

awk -F~ '{$2=$11=$12="";print $0}' OFS="~" 
+1

這會在這些字段之間留下幾個分隔符。 – Birei

1

你可以使用cut

$ echo "T01~T02~T03~T04~T05~T06~T07~T08~T09~T10~T11~~T13" | cut -d~ -f1,3-10,13 
T01~T03~T04~T05~T06~T07~T08~T09~T10~T13