1 |
#!/usr/bin/perl |
2 |
use strict; |
3 |
use Getopt::Std; |
4 |
#use FindBin;use lib $FindBin::Bin; |
5 |
|
6 |
my $usage = q/Usage: |
7 |
|
8 |
cat tab_delim_file | trcol.pl [-c <col#>] [-G] <map_file> |
9 |
|
10 |
Replaces (translates) column <col#> (default 1) from tab delimited |
11 |
input with the corresponding string according to the word |
12 |
translation table in <map_file>, which is a simple space delimited, |
13 |
two column mapping table of the format: |
14 |
|
15 |
<string_to_find> <replacement> |
16 |
|
17 |
Use -G option if the input is GFF3 format and to only output the |
18 |
replaced column and the value of the ID field for the mRNA |
19 |
features only. |
20 |
|
21 |
|
22 |
/; |
23 |
umask 0002; |
24 |
getopts('Gc:') || die($usage."\n"); |
25 |
my $replcol=$Getopt::Std::opt_c || 1; #column to replace |
26 |
my $gffmap=$Getopt::Std::opt_G; |
27 |
$replcol--; |
28 |
die("$usage\n") if $replcol<0; |
29 |
my $xtable=$ARGV[0]; |
30 |
die ("$usage\n") unless $xtable && -f $xtable; |
31 |
my %xw; |
32 |
open(XTBL, $xtable) || die ("Error opening file $xtable!\n"); |
33 |
while (<XTBL>) { |
34 |
chomp; |
35 |
next unless $_; |
36 |
my @t=split; |
37 |
$xw{$t[0]}=$t[1]; |
38 |
} |
39 |
while (<STDIN>) { |
40 |
chomp; |
41 |
my @t=split(/\t/); |
42 |
my $tx=$xw{$t[$replcol]}; |
43 |
$t[$replcol]=$tx if $tx; |
44 |
if ($gffmap) { |
45 |
next unless m/ID=([^;]+)/; |
46 |
my $id=$1; |
47 |
$id=~s/\.\w+\d$//; |
48 |
print $t[$replcol]."\t$id\n"; |
49 |
} |
50 |
else { |
51 |
print join("\t",@t)."\n"; |
52 |
} |
53 |
} |