我正在尝试设置一个脚本,它将根据我在NGS数据中找到的变体将密码子序列转换为另一个密码子序列。
目前,我的脚本创建了一个由制表符分隔的输出文件,包含6列.每一栏代表以下内容:
输出数据如下所示:
2289 G GTG 3 0.0346505 A
2478 G ATG 2 0.0054087 C
是否可以在输出文件中设置第7列,根据第4列的数字将密码子的核苷酸序列更改为SNP核苷酸(第6列)?
例如,
密码子GTG将成为GTA。SNP核苷酸A取代密码子中的第3核苷酸序列,密码子序列顺序在第4列中指定。
密码子ATG将成为ACG。SNP核苷酸C取代密码子中的第二核苷酸序列。
是否可以使用awk
或sed
来做到这一点?
发布于 2018-01-01 19:52:44
对“有可能.”的问题,只回答“是”是很诱人的。
像这样的东西会起作用吗?
awk '{l=substr($3,1,$4-1); r=substr($3,$4+1); print $0"\t"l $6 r}' genome > mutated
发布于 2018-01-01 22:28:09
Perl解决方案:
perl -lane 'substr $n = $F[2], $F[3] - 1, 1, $F[5]; print join "\t", $_, $n' -- file
-n
逐行读取输入-l
从输入中删除新行并将它们添加到打印s-a
将空格上的每一行拆分为@F数组发布于 2018-01-01 22:51:06
通过一些perl
分裂和连接:
perl -alne '
@c = split //, $F[2];
splice @c, $F[3]-1, 1, $F[5];
print join "\t", @F, join "", @c;
' data
解释:
- split 3rd column into character array @c
- replace the value indexed by the 4th column with that of the 6th
- stitch it all back together, delimited by tabs
测试-给定
$ cat data
2289 G GTG 3 0.0346505 A
2478 G ATG 2 0.0054087 C
然后
$ perl -alne '
@c = split //,$F[2]; splice @c,$F[3]-1,1,$F[5]; print join "\t",@F,join "",@c
' data
2289 G GTG 3 0.0346505 A GTA
2478 G ATG 2 0.0054087 C ACG
https://unix.stackexchange.com/questions/414173
复制相似问题