以下に、私が生成した2つの配列の内容を示します。2つの配列を組み合わせて、繰り返される同一のヘッダーを削除し、同じ形式を維持するにはどうすればよいですか?ほとんどマトリックスを作成するのと同じです。現在、メッシュを使用して配列を1つに結合していますが、うまく機能しません。分割、プッシュなど、他に役立つ可能性のあるものは他にありません。以下にコードを示します。
入力ファイル「phred.txt」
"#$%&'()
入力ファイル「bases.txt」
ABCDEFGH
印刷アレイ1からの出力
Sequence_1
1 2 3 4 5
印刷アレイ2からの出力
Sequence_1
A B C D E
両方のアレイを組み合わせて必要な出力
Sequence_1
1 2 3 4 5
A B C D E
メッシュを使用する現在の戦略の結果
Sequence_1
Sequence_1
1A 2B 3C 4D 5E
現在のコード
use warnings;
use strict;
use List::MoreUtils qw(mesh);
open( PHRED, '<', '/path/to/phred.txt' ) or die $!;
open( BASES, '<', '/path/to/bases.txt' ) or die $!;
open( OUT, '>', '/path/to/out.txt' ) or die $!;
my @symbols;
my @bases;
my $count = 0;
my @finalphred;
my @finalbases;
my %hash = (
'"' => "1",
'#' => "2",
'$' => "3",
'%' => "4",
'&' => "5",
q(') => "6",
'(' => "7",
')' => "8"
);
while ( my $fastq = <PHRED> ) {
my $substring = substr( $fastq, 0, 5 );
push( @symbols, $substring );
}
foreach ( @symbols ) {
my @eachsymbol = split //, $_;
$count++;
push( @finalphred, "\n", "Sequence_$count\n" );
foreach my $symbol ( @eachsymbol ) {
if ( exists( $hash{$symbol} ) ) {
push( @finalphred, $hash{$symbol}, "\t" );
}
}
}
my $count_again = 0;
while ( my $fastq_again = <BASES> ) {
my $substring_again = substr( $fastq_again, 0, 5 );
push( @bases, $substring_again );
}
foreach ( @bases ) {
my @eachsymbol_again = split //, $_;
$count_again++;
push( @finalbases, "\n", "Sequence_$count_again\n" );
foreach my $symbol_again (@eachsymbol_again){
push (@finalbases, $symbol_again, "\t");
}
}
foreach (@finalphred){ #diagnostic to test array contents
print "$_";
}
foreach (@finalbases){ #diagnostic to test array contents
print "$_";
}
my @last = mesh @finalphred, @finalbases;
print OUT @last;
このコードを完成させるのを手伝ってくれて、そして正しい出力を得てくれてありがとう!
主な問題の1つは、の内容を決して印刷しないことです@eachsymbol_again
。各4文字の文字列を4文字に分割し、その配列に入れますが、無視します。それは確かにあなたが言うような出力を生成しません。
また、mesh
そのような配列を組み合わせるのは奇妙な選択です
参考までに、配列は次のようになります
[
"\n",
"Sequence_1\n",
1,
"\t",
2,
"\t",
3,
"\t",
4,
"\t",
"\n",
"Sequence_2\n",
5,
"\t",
6,
"\t",
7,
"\t",
8,
"\t",
)
(
"\n",
"Sequence_1\n",
"\n",
"Sequence_2\n"
)
これらの2つの配列には同じ数の要素mesh
がないため、それらを呼び出すことはあまり意味がありません。
これが実用的なプログラムです
以下のデータを使用しました
"#$%
&'()
ABCD
EFGH
use strict;
use warnings 'all';
use autodie;
my %xlate = map { chr($_ + 33) => $_ } 1 .. 8;
open my $phred_fh, '<', 'phred.txt';
open my $bases_fh, '<', 'bases.txt';
my $n;
until ( eof $phred_fh or eof $bases_fh ) {
my @syms = map [ split //, substr <$_>, 0, 4 ], $phred_fh, $bases_fh;
printf "Sequence_%d\n", ++$n;
print join("\t", map $xlate{$_}, @{$syms[0]}), "\n";
print join("\t", @{$syms[1]}), "\n";
print "\n";
}
Sequence_1
1 2 3 4
A B C D
Sequence_2
5 6 7 8
E F G H
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加