[2] | 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 | |
---|