私は、次世代シーケンシングイルミナデータの分析のために、さまざまなスクリプトと入力パラメーターを一緒にパイプすることを含むバイオインフォマティクスプロジェクトに取り組んでいます。ラッパースクリプトについてサポートが必要です。ラッパーは、システムコマンドまたはユーティリティを埋め込んだシェルスクリプトであり、一連のパラメータを受け入れてそのコマンドに渡すことを思い出してください。複雑なコマンドラインでスクリプトをラップすると、スクリプトの呼び出しが簡単になります。
コードの最小限の表現は次のとおりです。
#!/usr/bin/perl
use strict; use warnings;
my $barcode_file= shift;
unless($barcode_file){
die "missing barcode file location, aborting.\n";
}
my $raw_data_location = '/data/local/samples/';
my $components_location= '~/read_cleanup/';
my $tmp_dir= '/tmp/';
open (FILEIN, $barcode_file) or die "couldn't open $barcode_file for read: $!\n";
while(<FILEIN>){
# input file format (tab delimited):
# Sample_Name barcode enzyme size paired seq_file
/^$/ and next; chomp;
my ($sample, $barcode, $enzyme, $size, $pe, $seq_file)= split;
$raw_file_data = "${raw_data_location}$seq_file"; #/data/local/samples/301.fq for instance
# final output file
my $final_output_file = "${tmp_dir}${sample}_reconciled_ends.fq"; # /tmp/D1_reconciled_ends.fq for instance
# if the sample is paired ( 1 - paired, 0 - unpaired)
if ($pe) {
my $pipe_cmd= "${components_location}script01.pl $raw_data_file $barcode | ${components_location}script02.pl $enzyme | ${components_location}script03.pl $size > $final_output_file";
}
system($pipe_cmd);
# at this point, $final_output_file should be saved in the
# tmp folder and contain the paired fastq data output
}
close (FILEIN);
基本的に、ラッパーはbarcode.txtファイルを読み取り、ファイルの各行(サンプル名)をループします。サンプル名ごとに、パイプ実行の各スクリプトの入力パラメーターが生成されます。サンプルがペアデータの場合、パイプ実行を実行します。配管スキームは次のようになります。
# the input parameters are "fed" into the script and the output is piped
# as STDIN to the next script.
script01.pl [input parameters] | script02.pl [input parameters] | script03.pl [input parameters] > file.txt
system($piped_cmd)
ターミナルでパイプ実行を実行します。
ターミナルからラッパースクリプトを実行しようとすると、問題が発生します。
./wrapper_example.pl barcode.txt
次のエラーメッセージが返されます。
sh: 1: /home/user/read_cleanup/script01.pl: not found
誰かが何が悪いのか、これを修正する方法を知っていますか?ありがとう。どんな提案でも大歓迎です。