Perl:2つの配列を組み合わせ、同一のヘッダーを削除し、フォーマットを維持する

ロブ

以下に、私が生成した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そのような配列を組み合わせるのは奇妙な選択です

参考までに、配列は次のようになります

@finalphred

[
  "\n",
  "Sequence_1\n",
  1,
  "\t",
  2,
  "\t",
  3,
  "\t",
  4,
  "\t",
  "\n",
  "Sequence_2\n",
  5,
  "\t",
  6,
  "\t",
  7,
  "\t",
  8,
  "\t",
)

@finalbases

(
  "\n",
  "Sequence_1\n",
  "\n",
  "Sequence_2\n"
)

これらの2つの配列には同じ数の要素meshがないため、それらを呼び出すことはあまり意味がありません。



更新

これが実用的なプログラムです

以下のデータを使用しました

phred.txt

"#$%
&'()

bases.txt

ABCD
EFGH

Perlコード

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]

編集
0

コメントを追加

0

関連記事

分類Dev

2つのフォーマットを組み合わせる

分類Dev

2つのSelectステートメントをフォーマットを追加して組み合わせる

分類Dev

'フォーマット'内で2つのMvcHtmlStringを一緒に組み合わせる

分類Dev

オブジェクトの配列を組み合わせ、同じ値のキーを組み合わせ、一意の値を維持します

分類Dev

パンダのデータフレームを組み合わせる:列の冗長性を削除しながら行の冗長性を維持する

分類Dev

配列とヘッダーの組み合わせ-空の配列を取得する

分類Dev

Perl:ハッシュの2つの配列の値を組み合わせ、2番目の配列の値を出力ハッシュのキーにします

分類Dev

2つのgitフォルダーを組み合わせる

分類Dev

2つのファイルのデータをawkのヘッダーと組み合わせる方法

分類Dev

2つのデータセットを組み合わせてブール列(パンダ)を形成する

分類Dev

同じヘッダーを持つテキストファイルを組み合わせる

分類Dev

2つの独立したパンダデータフレームを組み合わせてマトリックスを形成する

分類Dev

文字列のフォーマット-複数のフォームを組み合わせる

分類Dev

順序を維持し、重複を削除しながら、2つのリストを組み合わせる

分類Dev

Numpy:2つの配列を組み合わせて行列にし、ラムダでマップします

分類Dev

MySQL-列値のフォーマットされた組み合わせを検索します

分類Dev

同じキーを持つ3つのマップを組み合わせる

分類Dev

ノードjsで同じフィールドを持つ2つの配列を組み合わせる

分類Dev

Employeeの異なる属性を持つ2つの配列リストをマージして、両方の配列リストの属性を組み合わせた新しい配列リストを作成します

分類Dev

2つのデータフレームを組み合わせて、一方のデータフレームの値がもう一方のデータフレームのヘッダーになるようにします

分類Dev

海生まれの2つのヒートマップを組み合わせる

分類Dev

異なるy軸を持つ2つのドットプロットを組み合わせると、x軸でオーバーラップします

分類Dev

Java:値がストリームを使用して一致する場合、2つのマップキーを組み合わせる

分類Dev

2つのネットワークを組み合わせる

分類Dev

Seabornで2つのヒートマップを組み合わせる

分類Dev

キーを照合して2つの配列を組み合わせる

分類Dev

パンダは1つの列を2つの列の組み合わせにマップします

分類Dev

文字列フォーマットの固定表記とロケール表記を組み合わせる

分類Dev

PHPで2つ以上の配列を異なるフォルマントと組み合わせる

Related 関連記事

  1. 1

    2つのフォーマットを組み合わせる

  2. 2

    2つのSelectステートメントをフォーマットを追加して組み合わせる

  3. 3

    'フォーマット'内で2つのMvcHtmlStringを一緒に組み合わせる

  4. 4

    オブジェクトの配列を組み合わせ、同じ値のキーを組み合わせ、一意の値を維持します

  5. 5

    パンダのデータフレームを組み合わせる:列の冗長性を削除しながら行の冗長性を維持する

  6. 6

    配列とヘッダーの組み合わせ-空の配列を取得する

  7. 7

    Perl:ハッシュの2つの配列の値を組み合わせ、2番目の配列の値を出力ハッシュのキーにします

  8. 8

    2つのgitフォルダーを組み合わせる

  9. 9

    2つのファイルのデータをawkのヘッダーと組み合わせる方法

  10. 10

    2つのデータセットを組み合わせてブール列(パンダ)を形成する

  11. 11

    同じヘッダーを持つテキストファイルを組み合わせる

  12. 12

    2つの独立したパンダデータフレームを組み合わせてマトリックスを形成する

  13. 13

    文字列のフォーマット-複数のフォームを組み合わせる

  14. 14

    順序を維持し、重複を削除しながら、2つのリストを組み合わせる

  15. 15

    Numpy:2つの配列を組み合わせて行列にし、ラムダでマップします

  16. 16

    MySQL-列値のフォーマットされた組み合わせを検索します

  17. 17

    同じキーを持つ3つのマップを組み合わせる

  18. 18

    ノードjsで同じフィールドを持つ2つの配列を組み合わせる

  19. 19

    Employeeの異なる属性を持つ2つの配列リストをマージして、両方の配列リストの属性を組み合わせた新しい配列リストを作成します

  20. 20

    2つのデータフレームを組み合わせて、一方のデータフレームの値がもう一方のデータフレームのヘッダーになるようにします

  21. 21

    海生まれの2つのヒートマップを組み合わせる

  22. 22

    異なるy軸を持つ2つのドットプロットを組み合わせると、x軸でオーバーラップします

  23. 23

    Java:値がストリームを使用して一致する場合、2つのマップキーを組み合わせる

  24. 24

    2つのネットワークを組み合わせる

  25. 25

    Seabornで2つのヒートマップを組み合わせる

  26. 26

    キーを照合して2つの配列を組み合わせる

  27. 27

    パンダは1つの列を2つの列の組み合わせにマップします

  28. 28

    文字列フォーマットの固定表記とロケール表記を組み合わせる

  29. 29

    PHPで2つ以上の配列を異なるフォルマントと組み合わせる

ホットタグ

アーカイブ