我有一组 vcf 文件,每个文件都有一个以 'SRR' 开头的字符串。例如,在 file1 中我有以下行:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SRR2481146_1
在文件2中,我有:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SRR2481151_1
在文件3中,我有:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SRR2481163_1
我想用特定的细胞系名称替换这些字符串,例如,将 file1 中的 'SRR2481146_1' 替换为 'HCT116_DMSO',将 file2 中的 'SRR2481151_1' 替换为 'SW_DMSO',将 file3 中的 'SRR2481163_1' 替换为 'COLO205' 等等。
即,对于 file1,所需的输出应该是:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT HCT116_DMSO
对于文件2:
#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 个文件,这样做太耗时了。
有什么好的办法吗?
谢谢!
答案1
正如@Kusalananda 所写,最好在https://bioinformatics.stackexchange.com/。也许有人可以把这个问题移到那里?
创建一个文本文件,在其中的每一行中写入旧名称和所需的新名称,并以空格分隔。
$ cat names.txt
SRR2481146_1 HCT116_DMSO
SRR2481151_1 SW_DMSO
使用bcftools 重新标头更改样本名称,如下所示:
$ bcftools reheader -s names.txt file.vcf > file_renamed.vcf
您可以使用gnu并行vcf
对文件夹中的所有文件运行此命令:
$ parallel 'bcftools reheader -s names.txt {} > {.}_renamed.vcf' ::: *.vcf