use warnings; use strict; chdir "\.\/IN"; my @files = glob "*txt"; foreach (@files) { my $infile = "$_"; print "$infile opened\n"; open my $fh, "<", $infile or die "can not open '$infile' $infile\n$!\n"; my @hh; while (<$fh>) { chomp; @hh = split /\t/, $_; last; } close $fh or die "can not close filehandle\n"; print "$infile closed\n"; chdir "\.\."; print "insert column name used for calculation\ni.e MaxQuant LFQ intensity\n"; chomp( my $w = ); my @lfq = grep { /^$w/ } @hh; @lfq = map { ( my $foo = $_ ) =~ s/^$w //; $foo } @lfq; print "insert name of control without replicate number\n"; chomp( my $c = ); my @crl = grep { /^$c*/ } @lfq; my @res = grep { !/^$c*/ } @lfq; push @crl, @res; print "insert number of groups\n"; chomp( my $g = ); print "insert number of replicates\n"; chomp( my $l = ); my $length = scalar @lfq; if ( $length == $g * $l ) { my @out; my $nn = join "\t", @crl; my @ll = ( 1 .. $g ); my @dd = ( 1 .. $l ); my @gg; for ( 1 .. $g ) { until ( scalar @gg == $_ * $l ) { push @gg, $_; } } my @cc; for ( 1 .. $length ) { push @cc, $w } my $hj = join "\t", @cc; my $jj = join "\t", @gg; push @out, "$hj\n"; push @out, "$jj\n"; unshift @out, "$nn\n"; my $outfile = "\.\/INFO\/order.txt"; open my $out, ">", $outfile or die "$!"; print $out @out; print "results printed in $outfile\n"; close $out or die "can not close filehandle for printing\n$!\n"; } else { print "wrong number of groups or replicates\ncheck column names for typos\n"; } } #### #!/Users/andreafossati/perl5/perlbrew/perls/perl-5.24.0/bin/perl use warnings; use strict; use Data::Dumper; my $info = "\.\/INFO\/order.txt"; open my $fh, "<", $info or die "can not open 'info' txt, run order pl first\n$!\n"; my (@bb, %kk, $us, @sam); my $sw = 0; while (<$fh>) { if (!/^[1-9]{1}/ && $sw == 0 ) { @sam = split /\t/, $_; $sw = 1; next; } if (/^[1-9]{1}/ && ( @sam ) ) { @bb = split /\t/, $_; @kk{@sam} = @bb; next; } my $st = $_; my @ff = split /\t/, $st; @ff = uniq(@ff); $us = $ff[0]; } close $fh or die "can not close 'info' fh\n$!"; my @m = reverse sort {$a <=> $b} values %kk; my $gr = $m[0]; (@m, @bb) = (); print "\n$gr groups found, column used for quantification: $us\n"; print "\ninsert filename to be processed\nneeds to be a tab delimited file in IN folder\n"; chomp (my $filename = ) ; my $in = "\.\/IN\/$filename.txt"; print "\ninsert prot identifier name\n"; chomp (my $w = ); open my $fh_2, "<", $in or die "can not open $filename,\n$!\n"; my (@h, @d, @id, %gg ) = (); while (<$fh_2>) { chomp; my %t = (); if (/.*$w.*/) {@h = split /\t/, $_; next;} if ( @h ) { @d = split /\t/, $_; @t{@h} = @d; my $ll = $t{$w}; push @id, $ll; my @k; for (keys %kk) { my @cm = grep { /^$us.*/ } keys(%t); push @k, @cm; } @k = uniq(@k); for (@k) { my $key = $_; (my $k = $key ) =~ s/^$us.//; push @{$gg{$k}}, $t{$key}; } } else {next;} } close $fh_2 or die "can not close 'filename' fh\n$!"; sub uniq { my %seen; grep !$seen{$_}++, @_; }