编写一个perl脚本,要求如下:1.批量提取fasta文件的文件名作为第一列,将每个fasta文件中每行出现的第1个‘_’和第2个‘_’之间的字符串作为第二列。2.循环文件夹每个fasta文件。3.最终将每个fasta的循环结果输出合并为txt文本格式。
时间: 2024-02-01 08:16:16 浏览: 23
下面是一个符合要求的perl脚本示例:
```perl
#!/usr/bin/perl
use strict;
use warnings;
# 定义输入输出文件夹和输出文件名
my $input_folder = "input_folder";
my $output_file = "output_file.txt";
# 打开输出文件,准备写入
open(my $out_fh, ">", $output_file) or die "Cannot open $output_file for writing: $!";
# 列出输入文件夹下的所有fasta文件
opendir(my $input_fh, $input_folder) or die "Cannot open directory $input_folder: $!";
my @fasta_files = grep { /\.fasta$/ } readdir($input_fh);
closedir($input_fh);
# 循环处理每个fasta文件
foreach my $fasta_file (@fasta_files) {
# 打开fasta文件,准备读取
open(my $in_fh, "<", "$input_folder/$fasta_file") or die "Cannot open $fasta_file for reading: $!";
# 获取fasta文件名作为第一列
my $file_name = $fasta_file;
$file_name =~ s/\.fasta$//;
# 循环读取fasta文件的每行,获取第二列数据
while (my $line = <$in_fh>) {
chomp $line;
if ($line =~ /^>(\S+)_(\S+)_/) {
my $second_column = $2;
# 输出第一列和第二列数据到输出文件
print $out_fh "$file_name\t$second_column\n";
}
}
# 关闭fasta文件
close($in_fh);
}
# 关闭输出文件
close($out_fh);
print "Done!\n";
```
你可以将代码保存为一个.pl文件,在终端中调用perl来运行,例如:
```bash
perl extract_fasta_info.pl
```
其中,extract_fasta_info.pl是你保存的perl脚本文件名。执行完毕后,会在当前目录下生成一个名为output_file.txt的输出文件。