while (<$in_file>) { chomp; if (/^SAMPLE/) { my ( $placeholder, @coords ) = split /,/; foreach my $coord (@coords) { push @snp_bins, int( $coord / 100_000 ); } } else { my ( $id, @snps ) = split /,/; foreach my $snp (@snps) { # (@snps[0..$#snps-1] $snp =~ s/$snp/$snp,/ # put commas back in (preserve csv format) } foreach my $index ( 0 .. $#snp_bins ) { if ( $snps[$index] ) { push( @{ $data{$id}[ $snp_bins[$index] ] }, $snps[$index] ); # see note [1] } else { # replace 'undef' elements with flag data my @ones_array; foreach ( 1 .. 100) { push @ones_array, "1 1,"; } push( @{ $data{$id}[ $snp_bins[$index] ] }, @ones_array ) } } } } #### if ( $snps[$index] ) #### SAMPLE,16287215,16287226,16287365,16287649,16287784,16287851,16287912 HG00553,0 0,0 0,0 0,0 0,0 0,0 0,0 0 HG00554,0 0,0 0,0 0,0 0,0 0,0 0,0 0 HG00637,0 0,0 0,0 0,0 0,0 0,0 0,0 0 HG00638,0 0,0 0,0 0,0 0,0 0,1 1,0 0 HG00640,0 0,0 0,0 0,0 0,0 0,1 1,0 0 #### { HG00553 [ [0] undef, [1] undef, <<< SNIP>>> [159] undef, [160] undef, [161] undef, [162] [ [0] "0 0,", [1] "0 0,", [2] "0 0,", [3] "0 0,", [4] "0 0,", [5] "0 0,", [6] "0 0," ], [163] undef, [164] [ [0] "0 0," ], [165] undef, [166] undef, [167] undef, [168] undef, [169] undef, [170] [ [0] "0 0,", [1] "0 0,", [2] "0 0,", [3] "0 0,", [4] "0 0,", [5] "1 1,", [6] "0 0,", [7] "0 0,", [8] "1 1,", [9] "0 0,", [10] "0 0,", [11] "0 0,", [12] "0 0," ], [171] undef, [172] [ [0] "0 0,", [1] "0 0,", [2] "0 0,", [3] "0 0,", [4] "0 0,", [5] "0 0,", [6] "0 0,", [7] "0 0,", [8] "0 0,", [9] "0 0,", [10] "0 0,", [11] "0 0,", [12] "0 0," ], [173] undef, [174] [ [0] "0 0,", [1] "0 0,", [2] "0 0,", [3] "0 0,", [4] "0 0,", [5] "0 0,", [6] "0 0,", [7] "0 0,", [8] "0 0,", [9] "0 0,", [10] "0 0,", [11] "0 0,", [12] "0 0,", [13] "1 1,", [14] "0 0,", [15] "0 0,", [16] "0 0,", [17] "0 0,", [18] "0 0,", [19] "0 0,", [20] "0 0,", [21] "0 0,", [22] "0 0,", [23] "0 0,", [24] "0 0,", [25] "0 0,", [26] "0 0,", [27] "0 0,", [28] "0 0,", [29] "0 0,", [30] "0 0,", [31] "0 0,", [32] "0 0,", [33] "0 0,", [34] "0 0,", [35] "0 0,", [36] "0 0,", [37] "0 0,", [38] "0 0,", [39] "0 0,", [40] "0 0,", [41] "0 0,", [42] "0 0,", [43] "0 1,", [44] "0 1,", [45] "0 0,", [46] "0 0,", [47] "0 0,", [48] "0 0,", [49] "0 0,", [50] "0 0,", [51] "0 0,", [52] "0 0,", [53] "0 0,", [54] "0 0," ], [175] [ [0] "1 0,", <<< SNIP >>>