首页 > 解决方案 > awk 插入值和删除字段

问题描述

尝试根据 中的模式awk将值插入,然后删除。已经有一个值我试图在它前面插入一个新值,两个值之间有一个。确实执行但未按预期执行。谢谢 :)。$4$5$5$4:awk

F tab-delimited

chr1    629031  GT:CN   4   High Copy Gain
chr1    632301  GT:CN   3   CN Gain
chr1    6440431 GT:CN   2   CN Loss
chr1    16691021    GT:CN   1   Homozygous Copy Loss
chr1    6440431 GT:CN   0   CN Loss

awk

awk -F'\t' '{if ( $5~ /CN/ ) {print $4 ":" "0/1"} else {print $ ":" "1/1"}}' OFS="\t" f.txt | awk -F'\t' '!($5="")'

当前的 tab-delimited

chr1 629031 GT:CN 4
3:0/1
2:0/1
chr1 16691021 GT:CN 1
0:0/1

想要的 tab-delimited

chr1    629031  GT:CN   1/1:4
chr1    632301  GT:CN   0/1:3
chr1    6440431 GT:CN   0/1:2
chr1    16691021    GT:CN   1/1:1
chr1    6440431 GT:CN    0/1:0

标签: awk

解决方案


您有错字并使用 print 而不是修改字段,

$ awk 'BEGIN{FS=OFS="\t"} {$4=(($5~/CN/)?"0":"1")"/1:"$4; $5=""}1' file

应该做你想做的事。

可以进一步简化为

$ awk 'BEGIN{FS=OFS="\t"} {$4=($5!~/CN/)"/1:"$4; $5=""}1' file

推荐阅读