目录包含多个bam,对应的bam.bai文件以及以制表符分隔的matrixkey.txt。matrixkey在第一列中包含条形码,这些条形码也可以在bam / bai文件名中找到。
For example: Barcode001 Sample1
我想使用条形码来匹配带有样品名称的文件(位于matrixkey的第二列),并将所有文件重命名为:'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";
}
}
}
您可以尝试使用简单的awk脚本作为生成这些路径的替代方法,例如
awk -v bam_directory=dir_name -F"\t" '{print "mv " bam_directory "/" $1 ".bam " bam_directory "/" $1 "_" $2 ".bam"}' matrixkey.txt> move_commands
并在实际文件移动之前检查源文件路径
cut -f2 -d' ' move_path |xargs ls -l
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句