2013-09-25 132 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