我有一个perl脚本,该脚本读取.txt和.bam文件,并创建一个名为output.txt的输出。
我有很多文件,它们都位于不同的文件夹中,但是文件名和目录路径仅稍有不同。
我所有的txt文件都位于名为PointMutation的不同子文件夹中,完整路径为
/Volumes/Lab/Data/Darwin/Patient/[Plate 1/P1H10]/PointMutation
括号中的文本是更改的部分,但是Patient子文件夹包含我所有的txt文件。
我的.bam文件位于名为DNA的子文件夹中,完整路径为
/Volumes/Lab/Data/Darwin/Patient/[Plate 1/P1H10]/SequencingData/DNA
当前,我如何在终端上运行此脚本
cd /Volumes/Lab/Data/Darwin/Patient/[Plate 1/P1H10]/PointMutation
perl ~/Desktop/Scripts/Perl.pl "/Volumes/Lab/Data/Darwin/Patient/[Plate
1/P1H10]/PointMutation/txtfile.txt" "/Volumes/Lab/Data/Darwin/Patient/[Plate
1/P1H10]/SequencingData/DNA/bamfile.bam"
只有1个或2个文件,这相当容易,但是一旦文件变大,我想自动执行。同样,一旦我运行了一次,我就不想再做一次,但是我将从同一位患者那里获得更多信息,是否可以阻止读取文件夹?
答案 0 :(得分:0)
我会做类似的事情:
for my $dir (glob "/Volumes/Lab/Data/Darwin/Patient/*/"){
# skip if not a directory
if (! -d $dir) {
next;
}
my $txt = "$dir/PointMutation/txtfile.txt";
my $bam = "$dir/SequencingData/DNA/bamfile.bam";
# ... you magical stuff here
}
这是假设/Volumes/Lab/Data/Darwin/Patient/
下的所有目录都遵循约定。
也就是说,组织所有大量不同文件的分析的更长期/更稳健的方式是1)在一个目录下组织每次分析所需的所有文件,或者2)创建元文件(i使用JSON / yaml),其中包含必要的文件名。