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