如何用不同的字符串替换一组文件中的字符串?

如何用不同的字符串替换一组文件中的字符串?

我有一组 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

相关内容