1 | #! /usr/bin/perl -w |
---|
2 | |
---|
3 | use strict; |
---|
4 | use warnings; |
---|
5 | use File::Temp "tempfile"; |
---|
6 | |
---|
7 | my ($input1, $input2, $field1, $field2, $mode, $OOption, $out_file1) = @ARGV; |
---|
8 | |
---|
9 | die "No arguments\n" unless @ARGV == 7; |
---|
10 | |
---|
11 | my ($fh1, $file1) = tempfile(); |
---|
12 | my ($fh2, $file2) = tempfile(); |
---|
13 | |
---|
14 | `sort -k $field1 $input1 > $file1`; |
---|
15 | `sort -k $field2 $input2 > $file2`; |
---|
16 | |
---|
17 | my $option = ""; |
---|
18 | my @fields = (); |
---|
19 | my $line = ""; |
---|
20 | |
---|
21 | if ($OOption eq "Y") { |
---|
22 | if (defined($fh1)) { |
---|
23 | $line = <$fh1>; |
---|
24 | } else { |
---|
25 | die "Failed to create file $file1\n"; |
---|
26 | } |
---|
27 | @fields = split /\t/, $line; |
---|
28 | die "The field you selected does not exist in the input file" if (@fields < $field1); |
---|
29 | my @optionO = (); |
---|
30 | my $i = 0; |
---|
31 | foreach (@fields) { |
---|
32 | ++$i; |
---|
33 | push(@optionO, "1.$i"); |
---|
34 | } |
---|
35 | $option = "-o " . join(",", @optionO); |
---|
36 | } else { |
---|
37 | $option = ""; |
---|
38 | } |
---|
39 | |
---|
40 | $ENV{'LC_ALL'} = 'POSIX'; |
---|
41 | |
---|
42 | if ($mode eq "V") { |
---|
43 | `join -v 1 $option -1 $field1 -2 $field2 $file1 $file2 | tr " " "\t" > $out_file1`; |
---|
44 | } else { |
---|
45 | `join $option -1 $field1 -2 $field2 $file1 $file2 | tr " " "\t" > $out_file1`; |
---|
46 | } |
---|
47 | |
---|
48 | `rm $file1 ; rm $file2`; |
---|
49 | |
---|
50 | |
---|
51 | |
---|