ファイルセットの文字列を別の文字列に置き換えるには? [閉鎖]

ファイルセットの文字列を別の文字列に置き換えるには? [閉鎖]

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

おすすめ記事