【发布时间】:2016-07-11 18:31:23
【问题描述】:
一个目录包含多个 bam,对应的 bam.bai 文件以及一个制表符分隔的 matrixkey.txt。 matrixkey 包括第一列中的条形码,这些条形码也可以在 bam/bai 文件名中找到。
For example: Barcode001 Sample1
我想使用条形码来匹配带有样品名称的文件(位于矩阵键的第二列),并将所有文件重命名为:'barcode'_'sampleid'.bam/bam.bai 请看一下在我下面的代码中并提出改进建议。
例程运行没有错误,但文件没有被重命名。
#!/usr/bin/perl
use warnings;
use strict;
use File::Copy qw(move);
my $home="/data/";
my $bam_directory = $home."test_all_runs/Test_Runs";
my $matrix_key = $home."test_all_runs/Test_Runs/matrixkey.txt";
my @matrix_key = ();
open(TXT2, "$matrix_key");
while (<TXT2>){
push (@matrix_key, $_);
}
close(TXT2);
my @bam_files = glob "$bam_directory/*.bam";
my @bai_files = glob "$bam_directory/*.bai";
for my $bam_file (@bam_files){
my $matrix_barcode = "";
my $matrix_sample_id = "";
foreach (@matrix_key){
chomp($_);
my @matrix_key = split ("\t", $_);##
if (index ($bam_file,$matrix_key[0]) != -1) {
$matrix_barcode = $matrix_key[0]; print $matrix_key[0];
$matrix_sample_id = $matrix_key[1];
chomp $matrix_barcode;
chomp $matrix_sample_id;
move $bam_file, $bam_directory."/".$matrix_sample_id."_".$matrix_barcode.".bam";
}
}
}
【问题讨论】:
-
我不明白你的文件结构。您可以为每个涉及的文件名发布一两行内容吗? (例如,在
index中,您使用的是整个bam_file名称——这是有意的吗?Sample1是所述文件名吗?为什么要使用index?)查看文件是什么会有很大帮助。 -
您正在迭代
@matrix_key,并且您还使用了同名的局部变量。如果您将其重命名为其他任何内容,则不会那么混乱。 -
move $file, $new_file or die "Unable to move $file -> $new_file : $!"; -
@zdim bam 和 bam.bai 文件的名称很长,不包含样本名称,而只包含条形码标识符,例如barcode1_SPN-23456-RES_IonTorrent_SDL... .bam 我使用索引来查看 bam/bai/tsv 文件是否包含与密钥文件相同的条形码,然后查找样本名称并相应更改文件名称。我上面的代码有效,但我一直在为我想要重命名的不同文件扩展名类型的循环重复相同的操作:
for my $bam_file (@bam_files) … for my $bai_file(@bai_files) …for my $tsv_file(@tsv_files).
标签: perl