If the 1th column of file f1 and file f2 is the same, then export those line with maximum string of

please help to write a awk command-line programs to achieve the following functions: Thank in advance.

Requeset Description:
compare two files f1 and f2, export to file f3:
1 Delete duplicate rows of in file f1 and file f2
2 If the 1th column of file f1 and file f2 is the same, then export those line with maximum string of 2nd column.
for example:

  
 0.1-37    < 0.2-53;   
 6.1.4-b.0 < 6.1.5-c.2;   
 9.13.2    < 11.5.6;    
 18b-16    > 8c-7;   
 D15       < F4;   
 1.b5_a    < 1.b12_d   
 4c5.8     < 4c12.8   
 d18g      < d18j
 

3 Rule: For the 2nd column of 2 files:
> num of 0-9 consecutive occurrences may be different, such as 9.13.2 vs 11.5.6, D15 vs F4
> The type, order, num of other characters (such as '.' '_' '-' 'A-Z' 'a-Z') except 0-9 is the same.
like 6.1.4-b.0 vs 6.1.5-c.2, 1.b5_a vs 1.b12_d, D15 vs F4 ....
> if find the 1st large string after comparison, then stop comparing the 2nd column, and output this line of those file,
such as 'IO 1.b5_a' of f1, 'IO 1.b12_d' of f2, will output 'IO 1.b12_d'

4 cat f1:

 PK      0.1-37  
 Art     6.1.4-b.0  
 Fle     9.13.2     
 Uni     18b-16   
 STD     D15   
 IO      1.b5_a  
 FPG     4c5.8 
 SRA     d18g 
 .... 
 ....

cat f2:

 Uni     8c-7 
 IO      1.b12_d 
 Art     6.1.5-c.2 
 PK      0.2-53 
 Fle     11.5.6 
 SRA     d18j 
 STD     F4 
 FPG     4c12.8 
 .... 
 ....
 

desired file f3:

 Art     6.1.5-c.2 
 Fle     11.5.6 
 IO      1.b12_d 
 PK      0.2-53 
 STD     F4 
 Uni     18b-16   
 FPG     4c12.8 
 SRA     d18j 
 ... 
 ...
awk '
NR==FNR {a[$1]=$2; next}
{ if (length(a[$1])) {
      line1="";
      c=split($2, a1, "[^0-9A-Za-z]");

      for (i=1; i<=c; i++)  {
         t=u=a1;
         gsub("[0-9]", " ", t); gsub("[A-Za-z]", " ", u);
         d=split(t, a2); e=split(u, a3);
         if (a1 ~ /^[0-9]/) {
            for (j=1; j<=e; j++) line1=line1 (sprintf("%5s",  a3[j]));
            for (j=1; j<=d; j++) line1=line1 (sprintf("%5s",  a2[j]));
         } else {
            for (j=1; j<=d; j++) line1=line1 (sprintf("%5s",  a2[j]));
            for (j=1; j<=e; j++) line1=line1 (sprintf("%5s",  a3[j]));
         }
      }

      line2="";
      c=split(a[$1], a1, "[^0-9A-Za-z]");

      for (i=1; i<=c; i++)  {
         t=u=a1;
         gsub("[0-9]", " ", t); gsub("[A-Za-z]", " ", u);
         d=split(t, a2); e=split(u, a3);
         if (a1 ~ /^[0-9]/) {
            for (j=1; j<=e; j++) line2=line2 (sprintf("%5s",  a3[j]));
            for (j=1; j<=d; j++) line2=line2 (sprintf("%5s",  a2[j]));
         } else {
            for (j=1; j<=d; j++) line2=line2 (sprintf("%5s",  a2[j]));
            for (j=1; j<=e; j++) line2=line2 (sprintf("%5s",  a3[j]));
         }
      }
      if (line1 > line2 ) {print $1, $2} else {print $1, a[$1]}
   } else {
      print $1, $2;
   }
   delete a[$1];
}
END {
   for (i in a) if (length(a)) print i, a;
}
' OFS="\t" f1 f2