2013-09-25 2 views
0

У меня есть файл, содержащий сотни строк, и каждая строка имеет набор символов с разделителем ~, как показано ниже.Поиск и замена с помощью awk

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

Мне нужно удалить T02, T11 и T12 с помощью awk. Если вы видите выше струне T12 равна нулю, но все же мне нужно очистить эту позицию и мой вывод должен выглядеть следующим образом:

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 $0 к 1

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 
Смежные вопросы