我想创建一个第 8 和第 9 字段/列,并在第 4 列和第 5 列中将适当的字母编码为数字。六个冒号分隔的数字对应于A:T:C:G:N:del
注意:第 6 列和第 7 列中的某些行是空的,我通过插入 NA 来修复:
awk -F'[[:space:]]' '$5 && !$6{ $6="NA" }1'
awk -F'[[:space:]]' '$6 && !$7{ $7="NA" }1'
然后再次使用制表符分隔文件sed -e 's/ /\t/g'
文件.tsv
NW_006532398.1 302035 C 0:0:32:0:0:0 42:0:0:0:0:0 KCND2 intergenic_region
NW_006532656.1 289636 C 0:0:28:0:0:0 0:28:0:0:0:0 CNTN1 intron_variant
NW_006532762.1 6396 C 0:54:0:0:0:0 0:0:53:0:0:0 NA intergenic_region
NW_006532762.1 25741 C 0:0:62:0:0:0 0:43:0:0:0:0 NA intergenic_region
NW_006532762.1 32304 T 0:60:0:0:0:0 0:0:49:0:0:0 NA intergenic_region
NW_006532762.1 179065 G 0:0:0:45:0:0 59:0:0:0:0:0 DOCK4 intron_variant
output.tsv 示例
NW_006532398.1 302035 C 0:0:32:0:0:0 42:0:0:0:0:0 KCND2 intergenic_region C A
NW_006532656.1 289636 C 0:0:28:0:0:0 0:28:0:0:0:0 CNTN1 intron_variant C T
NW_006532762.1 6396 C 0:54:0:0:0:0 0:0:53:0:0:0 NA intergenic_region T C
NW_006532762.1 25741 C 0:0:62:0:0:0 0:43:0:0:0:0 NA intergenic_region C T
NW_006532762.1 32304 T 0:60:0:0:0:0 0:0:49:0:0:0 NA intergenic_region T C
NW_006532762.1 179065 G 0:0:0:45:0:0 59:0:0:0:0:0 DOCK4 intron_variant G A
任何帮助是极大的赞赏!!
我相信下面的 sed 脚本会做你想做的事情:
运行:
我们可以使用 Perl 和 sed 实用程序执行以下操作:
说明:
在当前记录的第四个
$F[3]
和第五个字段(又名,行)我们$F[4]
$_
确定第一个非零数字的位置(在该字段内)。凭借事实
0:
占用 2 个位置,我们将找到的位置减半以获取该字段的匿名数组索引qw[A T C G N del]
。现在只需将找到的 A/T/C/G/N 或 del 添加到 array 即可
@F
。@F
然后我们使用(tab)推断数组$"
,然后打印它。假设:
@F
数组中字段的计数。one-hot
,这意味着,总是有一个非零数字肯定存在。