Perl:在多个目录中的多个文件上运行脚本

问题描述 投票:0回答:1

我有一个读取.txt和.bam文件的perl脚本,并创建一个名为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"

只有一个或两个文件,这很容易,但我希望一旦文件变得更大就自动化它。此外,一旦我运行这些,我不想再这样做,但我会从同一个病人那里获得更多信息,有没有办法阻止文件夹被读取?

perl sh
1个回答
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)创建元文件(我使用JSON / yaml)包含必要的文件名。

© www.soinside.com 2019 - 2024. All rights reserved.