in reply to Looping issue...
So you want something like:
use strict; use warnings; my $first_line = <DATA>; chomp $first_line; my $snp_id_count; #my $num_of_strains = 48; print "snp_id\tstrain_id\trs_value\n"; my $skip_strain = '='; while (<DATA>) { chomp; my @fields = split /\t/; my $rs = $fields[2]; my @ids = @fields[4 .. $#fields]; my $strainId; $snp_id_count++; for my $id (@ids) { ++$strainId; next if $id eq '='; print "$snp_id_count\t$strainId\t$rs\n"; } } __DATA__ #chr loc rs observ 129S1 129S4 129X1 A/J 1 3.013441 rs31192577 A/T T T T = 1 3.036178 rs32166183 A/C C C C A 1 3.036265 rs30543887 A/G G G A A 1 3.039187 rs6365082 G/T = = T T
Prints:
snp_id strain_id rs_value 1 1 rs31192577 1 2 rs31192577 1 3 rs31192577 2 1 rs32166183 2 2 rs32166183 2 3 rs32166183 2 4 rs32166183 3 1 rs30543887 3 2 rs30543887 3 3 rs30543887 3 4 rs30543887 4 3 rs6365082 4 4 rs6365082
If you add further columns for more strain Ids it will 'Just Work'™.
|
|---|