我想得到一些帮助,在什么似乎是一个简单的问题,在一个perl script
。
我有两个列表,它们的行数相同,list1的第一行对应于list2的第一行,依此类推。
列表1
car
ball
列表2
30
40
我想写一个perl
脚本来运行调用文件名以list1的行开头的程序。在其中一个程序中,我必须考虑list2的内容,但这样做只针对list1中的对应行。
这就是我所尝试的:perl test.pl list1 list2
test.pl:
#! /usr/bin/perl -w
use strict;
my $lib = $ARGV[0];
my $cov = $ARGV[1];
chomp $lib;
chomp $cov;
open(INPUT, "$lib");
my @lib = <INPUT>;
close(INPUT);
foreach my $i (@lib){
chomp ($i);
`samtools fasta $i\.sorted.bam > $i\.fasta`;
`jellyfish count -m 80 -L $cov -s 275M -t 10 -C -o $i\.jf $i\.fasta`;
`jellyfish histo $i\.jf > $i\.histo`;
}
第一个程序(samtools
)正确执行,但第二个程序没有正确执行,因为它无法读取变量$cov
中的内容。
换句话说,我希望jellyfish count
中的L是“30”代表“car”,“40”代表“ball”,但我做不到。
1条答案
按热度按时间uxhixvfz1#
解决方案如下:
这里我使用了File::Slurp将文件的全部内容读入一个数组,所以你的环境中必须有
File::Slurp
Perl模块。这两个文件内容都存储在两个不同的数组中,分别称为
@file1_lines
和@file2_lines
。