awk разделить поле дважды, используя два разделителя с условием - PullRequest
0 голосов
/ 08 мая 2019

В awk я делю на space или : после chrxx (это не согласуется, поэтому я добавил оба как FS, а затем разделяю на -. Я не могукажется, что дублируется $2, если после него нет -. Примером являются строки 2,3. Если после числа стоит -, то значение справа от него равно $3 в выходном сигнале.awk кажется близким, но не дублирует значение. Спасибо:).

in

chr17 7124137-7124146 ACADVL
chr1 229568460 ACTA1
chr10 90708637 ACTA2

awk

awk -F"[ :-]" '$3=$3?$3:$2' OFS='\t' in

ток

chr17   7124137 7124146 ACADVL
chr1    229568460   ACTA1
chr10   90708637    ACTA2

желаемый выход

chr17   7124137 7124146 ACADVL
chr1    229568460   229568460   ACTA1
chr10   90708637    90708637    ACTA2

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Если количество полей равно трем, скопируйте 3-е поле в 4-е и 2-е в 3-е.Принудительно пересчитать всю запись, чтобы разделить вкладку вывода независимо от того, что было сделано ранее.

awk -F'[ :-]' 'NF==3{$4=$3;$3=$2} {$1=$1} 1' OFS='\t' in
0 голосов
/ 09 мая 2019
$ perl -lane 'if($F[1]=~/\-/){$F[1]=~s/-/ /}else{splice @F, 1, 0, $F[1];}print "@F" ' temp
chr17 7124137 7124146 ACADVL
chr1 229568460 229568460 ACTA1
chr10 90708637 90708637 ACTA2
[netcrk@o2uk1061 infinys_root]$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...