使用awk搜索和替换

时间:2013-09-25 10:41:43

标签: bash 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

任何人都可以告诉我,如果我错过任何事情......

3 个答案:

答案 0 :(得分:2)

您需要OFS,并且可以将print $0更改为1

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

答案 1 :(得分: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

答案 2 :(得分:0)

您还需要更改输出字段分隔符:

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