我有一组vcf文件,每个文件都有一个以'SRR'开头的字符串。例如,在file1中,我有以下一行:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SRR2481146_1
在file2中,我有:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SRR2481151_1
在文件3中,我有:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SRR2481163_1
我想用特定的单元格行名称替换这些字符串,例如,用'HCT116_DMSO'替换file1中的'SRR2481146_1',用'SW_DMSO'替换file2中的'SRR2481151_1',用'COLO205'替换file3中的'SRR2481163_1',依此类推。
即,对于文件1,所需的输出应为:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HCT116_DMSO
对于file2:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SW_DMSO
我知道我可以使用如下代码单独进行操作:
sed -i 's/SRR2481146_1/HCT116_DMSO/g' file1
sed -i 's/SRR2481151_1/SW_DMSO/g' file2
但是,由于我有约100个文件,因此这样做将非常耗时。
有什么好办法吗?
谢谢!
如@Kusalananda所写,最好在https://bioinformatics.stackexchange.com/上询问。也许有人可以将这个问题移到那里?
创建一个文本文件,在每一行中,您都写上旧名称和所需的新名称,并用空格分隔。
$ cat names.txt
SRR2481146_1 HCT116_DMSO
SRR2481151_1 SW_DMSO
使用bcftools reheader可以更改样本名称,如下所示:
$ bcftools reheader -s names.txt file.vcf > file_renamed.vcf
您可以使用gnu parallel在vcf
文件夹中的所有文件上运行此命令:
$ parallel 'bcftools reheader -s names.txt {} > {.}_renamed.vcf' ::: *.vcf
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句