私はディレクトリ(Linuxサーバー)内の複数のvcfファイルと、サンプル名と対応するバーコードを含むタブ区切りのキーファイルを扱っています。ここで部分文字列と一致する文字列
は、ファイルの名前の付け方である:ここでは
RA_4090_v1_RA_4090_RNA_v1.vcf
RA_4090_dup_v1_RA_4090_dup_RNA_v1.vcf
RA_565_v1.vcf
RA_565_dup_v1.vcf
RA_HCC-78-2.vcf
は、キーファイルの内容は以下のとおりです。
Barcode ID Sample Name
IonSelect-2 RA_4090
IonSelect-4 RA_565
IonSelect-6 RA_HCC-78-2
IonSelect-10 RA_4090_dup
IonSelect-12 RA_565_dup
私はそれぞれの.vcfファイルに正しいサンプル名を関連付けしてから名前を変更する必要があります各.vcfファイル
各サンプルには常に1つのvcfファイルがあります。ただし、サンプル名が同じ部分文字列で始まる場合があり、サンプル名が標準化されていないため、正しく一致させることは不可能です。
次のコードは、サンプル名が異なる場合は正常に動作しますが、複数のサンプル名が同じ部分文字列で始まる場合は失敗します。私は同じサブストリングで懇願している複数のサンプル名をどのように考慮するか考えていません。
問題のないことをご提案ください。ここでは、現在のコードは次のとおりです。
#!/usr/bin/perl
use warnings;
use strict;
use File::Copy qw(move);
my $home="/data/";
my $bam_directory = $home."test_all_runs/".$ARGV[0];
my $matrix_key = $home."test_all_runs/".$ARGV[0]."/key.txt";
my @matrix_key =();
open(TXT2, "$matrix_key") or die "Can't open '$matrix_key': $!";
while (<TXT2>){
push (@matrix_key, $_);
}
close(TXT2);
my @ant_vcf = glob "$bam_directory/*.vcf";
for my $tsv_file (@ant_vcf){
my $matrix_barcode_vcf = "";
my $matrix_sample_vcf = "";
foreach (@matrix_key){
chomp($_);
my @matrix_key = split ("\t", $_);##
if (index ($tsv_file,$matrix_key[1]) != -1) {
$matrix_barcode_vcf = $matrix_key[0]; print $matrix_key[0];
$matrix_sample_vcf = $matrix_key[1];
chomp $matrix_barcode_vcf;
chomp $matrix_sample_vcf;
#print $bam_directory."/".$matrix_sample_id."_".$matrix_barcode.".bam";
move $tsv_file, $bam_directory."/".$matrix_sample_vcf."_".$matrix_sample_vcf.".vcf";
}
}
}
これは素晴らしいです!どうもありがとうございました! – user3781528