awk使用两个带条件的分隔符两次拆分字段

时间:2019-05-08 15:27:07

标签: awk

awk上,我在space之后拆分:chrxx(这是不一致的,所以我将两者都添加为FS,然后在-上进行拆分。如果后面没有$2,我似乎无法复制-。第2,3行是示例。如果在后面有-数字,那么它右边的值就是输出中的$3awk看起来很近,但是并没有重复该值。谢谢:)。

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 个答案:

答案 0 :(得分:2)

如果字段数为3,则将第3个字段复制到第4个,然后将第2个字段复制到第3个。强制重新计算整个记录,以使输出选项卡分开,无论之前进行过什么操作。

awk -F'[ :-]' 'NF==3{$4=$3;$3=$2} {$1=$1} 1' OFS='\t' in

答案 1 :(得分:0)

$ 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]$