Perl:在多个目录中的多个文件上运行脚本
我有一个perl脚本,它读取一个.txt和一个.bam文件,并创建一个名为output.txt的输出 我有很多文件都在不同的文件夹中,但文件名和目录路径略有不同 我所有的txt文件都在不同的子文件夹中,称为PointMutation,完整路径为Perl:在多个目录中的多个文件上运行脚本,perl,sh,Perl,Sh,我有一个perl脚本,它读取一个.txt和一个.bam文件,并创建一个名为output.txt的输出 我有很多文件都在不同的文件夹中,但文件名和目录路径略有不同 我所有的txt文件都在不同的子文件夹中,称为PointMutation,完整路径为 /Volumes/Lab/Data/Darwin/Patient/[Plate 1/P1H10]/PointMutation 括号中的文本是更改的部分,但“患者”子文件夹包含我的所有txt文件 My.bam文件位于名为DNA的子文件夹中,其完整路径为
/Volumes/Lab/Data/Darwin/Patient/[Plate 1/P1H10]/PointMutation
括号中的文本是更改的部分,但“患者”子文件夹包含我的所有txt文件
My.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"
只有一两个文件,这是相当容易的,但我想在文件变得更大时自动执行。同样,一旦我运行了一次,我就不想再这样做了,但我会从同一位患者那里获得更多信息,有没有办法阻止文件夹被读取?我会执行以下操作:
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)其中包含必要的文件名。是否有办法将脚本中的当前目录设置为PointMutation文件夹?我对perl相当陌生,什么是JSON/yaml,元文件是临时文件吗?您可以执行
chdir”/任意/directory/You/want”。是的,我认为换到最相关的目录是个好主意。JSON和YAML是存储简单数据结构的常用格式,请参见它们的wikipedia页面以及相应的perl模块JSON和YAML。但是,如果您刚刚开始,我提供的示例和
chdir`函数应该会让您走得更远。“创建包含必要文件名的元文件(我会使用JSON/yaml)”对于文件路径列表,没有理由使用平面文件以外的任何东西。您可以神奇地阅读它,而无需使用外部模块@Borodin如果没有JSON/yaml,您会怎么做?