1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
#!/usr/bin/env perl
use strict;
use warnings;
my $usage = <<__EOUSAGE__;
###############################################
#
# Usage: $0 matrix.txt samples_with_relabeling.txt
#
#
# where samples_with_relabeling.txt has the format:
#
# sample_name <tab> current_column_name <tab> new_column_name
# ....
#
# Only those entries with new names listed will be updated, so leave new_column_name blank for those that should remain unchanged.
#
#
#################################################
__EOUSAGE__
;
my $matrix_file = $ARGV[0] or die $usage;
my $samples_with_relabeling = $ARGV[1] or die $usage;
main: {
my %new_column_names;
{
open (my $fh, $samples_with_relabeling) or die $!;
while (<$fh>) {
chomp;
my ($sample, $old_name, $new_name) = split(/\t/);
if ($new_name) {
$new_column_names{$old_name} = $new_name;
}
}
close $fh;
}
open (my $fh, $matrix_file) or die $!;
my $header = <$fh>;
chomp $header;
my @fields = split(/\t/, $header);
foreach my $field (@fields) {
if (my $new_name = $new_column_names{$field}) {
$field = $new_name;
}
}
print join("\t", @fields) . "\n";
while (<$fh>) {
print $_;
}
exit(0);
}
|