シェルスクリプトの書き方についてほとんど知らなかったので、perl ドライバースクリプト内でいくつかの UNIX ツールを使用しようとしました。私の目的は、いくつかの単純な UNIX コマンドを組み合わせて、1 つの perl コマンドで 100 個のディレクトリに対してスクリプトを実行できるようにすることです。
タスクは、100 個を超えるフォルダーがあり、各フォルダーに n 個のファイルがあることです。各フォルダーで同じことをしたいです。つまり、それらのファイルを結合し、結合したファイルを並べ替え、bedtools を使用して重複領域を結合します (バイオインフォマティクスでは非常に一般的な方法です)。
ここに私が持っているものがあります:
#!/usr/bin/perl -w
use strict;
my $usage ="
This is a driver script to merge files in each folder into one combined file
";
die $usage unless @ARGV;
my ($in)=@ARGV;
open (IN,$in)|| die "cannot open $in";
my %hash;
my $final;
while(<IN>){
chomp;
my $tf = $_;
my @array =`ls $tf'/.'`;
my $tmp;
my $tmp2;
foreach my $i (@array){
$tmp = `cut -f 1-3 $tf'/'$i`;
$tmp2 = `cat $tmp`;
}
my $tmp3;
$tmp3=`sort -k1,1 -k2,2n $tmp2`;
$final = `bedtools merge -i $tmp3`;
}
print $final,"\n";
この行がまったく機能していないことはわかっています..
$tmp2 = `cat $tmp`;
問題は、出力を perl の別の変数に送信し、後でその変数を別の UNIX コマンドで使用する方法です...
どこを変更して機能させることができるかを指摘できるかどうか教えてください。大変感謝しています。