Sort a list of object identifiers: Difference between revisions

From Rosetta Code
Content added Content deleted
No edit summary
No edit summary
Line 53: Line 53:
# 17 | .1.3.6.1.4.1.11150.3.4.0.11 |
# 17 | .1.3.6.1.4.1.11150.3.4.0.11 |
# 18 | .1.3.6.1.4.1.11150.3.4.0.21 |
# 18 | .1.3.6.1.4.1.11150.3.4.0.21 |


=={{header|Perl}}==

<lang perl>

#!/usr/bin/perl

###--------------------------
### Sort: -OID - Numeric
### Bert Mariani 2016-07-07
###--------------------------

@arrayOID = () ;
@arrayOIDSorted = () ;

@arrayOID =
(
".1.3.6.1.4.1.11.2.17.19.3.4.0.10",
".1.3.6.1.4.1.11150.3.4.0.2",
".1.3.6.1.4.1.11.2.17.19.3.4.0.19",
".1.3.6.1.4.1.11150.3.4.0.1",
".1.3.6.1.4.1.11.2.17.19.3.4.0.22",
".1.3.6.1.4.1.11.2.17.19.3.4.0.2",
".1.3.6.1.4.1.11150.3.4.0.11",
".1.3.6.1.4.1.11.2.17.19.3.4.0.1",
".1.3.6.1.4.1.11.2.17.3773.0.2",
".1.3.6.1.4.1.11.2.17.19.2.0.79",
".1.3.6.1.4.1.11150.3.4.0.21",
".1.3.6.1.4.1.11.2.17.19.2.0.9",
".1.3.6.1.4.1.11.2.17.19.3.4.0.25",
".1.3.6.1.4.1.11.2.17.19.3.4.0.32",
".1.3.6.1.4.1.11.2.17.19.3.4.0.4",
".1.3.6.1.4.1.11.2.17.19.3.4.0.31",
".1.3.6.1.4.1.11.2.17.19.3.4.0.3",
".1.3.6.1.4.1.11.2.17.3773.0.1"
);

### One big long line ... made readable
@arrayOIDSorted =
map { $_->[0] }
sort { $a->[1] cmp $b->[1] }
map { [ $_,
join '', map { sprintf("%8d",$_) }
split( /\./, $_)
]
}
@arrayOID;

print "\nAfter OID Sort \n\n";
$ptrN = 0;
$entry = 1;

while ( $arrayOIDSorted[$ptrN] )
{
print "$entry | $arrayOIDSorted[$ptrN] |\n" ;
$entry++;
$ptrN++;
}

print "\nEnd OID Sort \n\n";

###=========================================
#
# After OID Sort
#
# 1 | .1.3.6.1.4.1.11.2.17.19.2.0.9 |
# 2 | .1.3.6.1.4.1.11.2.17.19.2.0.79 |
# 3 | .1.3.6.1.4.1.11.2.17.19.3.4.0.1 |
# 4 | .1.3.6.1.4.1.11.2.17.19.3.4.0.2 |
# 5 | .1.3.6.1.4.1.11.2.17.19.3.4.0.3 |
# 6 | .1.3.6.1.4.1.11.2.17.19.3.4.0.4 |
# 7 | .1.3.6.1.4.1.11.2.17.19.3.4.0.10 |
# 8 | .1.3.6.1.4.1.11.2.17.19.3.4.0.19 |
# 9 | .1.3.6.1.4.1.11.2.17.19.3.4.0.22 |
# 10 | .1.3.6.1.4.1.11.2.17.19.3.4.0.25 |
# 11 | .1.3.6.1.4.1.11.2.17.19.3.4.0.31 |
# 12 | .1.3.6.1.4.1.11.2.17.19.3.4.0.32 |
# 13 | .1.3.6.1.4.1.11.2.17.3773.0.1 |
# 14 | .1.3.6.1.4.1.11.2.17.3773.0.2 |
# 15 | .1.3.6.1.4.1.11150.3.4.0.1 |
# 16 | .1.3.6.1.4.1.11150.3.4.0.2 |
# 17 | .1.3.6.1.4.1.11150.3.4.0.11 |
# 18 | .1.3.6.1.4.1.11150.3.4.0.21 |
#
# End OID Sort
#===========================================

/<lang perl>

Revision as of 20:29, 7 July 2016

Sort by OID numbers.

OID - Object Identifiers are used in Network data These numbers can vary in length, and have a dot "." between them. The individual number can be of different number of digits also.

Example:

==========================

INPUT

@arrayOID = (

 ".1.3.6.1.4.1.11.2.17.19.3.4.0.10",
 ".1.3.6.1.4.1.11150.3.4.0.2",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.19",
 ".1.3.6.1.4.1.11150.3.4.0.1",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.22",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.2",
 ".1.3.6.1.4.1.11150.3.4.0.11",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.1",
 ".1.3.6.1.4.1.11.2.17.3773.0.2",
 ".1.3.6.1.4.1.11.2.17.19.2.0.79",
 ".1.3.6.1.4.1.11150.3.4.0.21",
 ".1.3.6.1.4.1.11.2.17.19.2.0.9",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.25",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.32",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.4",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.31",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.3",
 ".1.3.6.1.4.1.11.2.17.3773.0.1"

);

============================

OUTPUT - Correctly Sorted

  1. 01 | .1.3.6.1.4.1.11.2.17.19.2.0.9 |
  2. 02 | .1.3.6.1.4.1.11.2.17.19.2.0.79 |
  3. 03 | .1.3.6.1.4.1.11.2.17.19.3.4.0.1 |
  4. 04 | .1.3.6.1.4.1.11.2.17.19.3.4.0.2 |
  5. 05 | .1.3.6.1.4.1.11.2.17.19.3.4.0.3 |
  6. 06 | .1.3.6.1.4.1.11.2.17.19.3.4.0.4 |
  7. 07 | .1.3.6.1.4.1.11.2.17.19.3.4.0.10 |
  8. 08 | .1.3.6.1.4.1.11.2.17.19.3.4.0.19 |
  9. 09 | .1.3.6.1.4.1.11.2.17.19.3.4.0.22 |
  10. 10 | .1.3.6.1.4.1.11.2.17.19.3.4.0.25 |
  11. 11 | .1.3.6.1.4.1.11.2.17.19.3.4.0.31 |
  12. 12 | .1.3.6.1.4.1.11.2.17.19.3.4.0.32 |
  13. 13 | .1.3.6.1.4.1.11.2.17.3773.0.1 |
  14. 14 | .1.3.6.1.4.1.11.2.17.3773.0.2 |
  15. 15 | .1.3.6.1.4.1.11150.3.4.0.1 |
  16. 16 | .1.3.6.1.4.1.11150.3.4.0.2 |
  17. 17 | .1.3.6.1.4.1.11150.3.4.0.11 |
  18. 18 | .1.3.6.1.4.1.11150.3.4.0.21 |


Perl

<lang perl>

  1. !/usr/bin/perl
      1. --------------------------
      2. Sort: -OID - Numeric
      3. Bert Mariani 2016-07-07
      4. --------------------------

@arrayOID = () ; @arrayOIDSorted = () ;

@arrayOID = (

 ".1.3.6.1.4.1.11.2.17.19.3.4.0.10",
 ".1.3.6.1.4.1.11150.3.4.0.2",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.19",
 ".1.3.6.1.4.1.11150.3.4.0.1",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.22",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.2",
 ".1.3.6.1.4.1.11150.3.4.0.11",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.1",
 ".1.3.6.1.4.1.11.2.17.3773.0.2",
 ".1.3.6.1.4.1.11.2.17.19.2.0.79",
 ".1.3.6.1.4.1.11150.3.4.0.21",
 ".1.3.6.1.4.1.11.2.17.19.2.0.9",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.25",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.32",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.4",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.31",
 ".1.3.6.1.4.1.11.2.17.19.3.4.0.3",
 ".1.3.6.1.4.1.11.2.17.3773.0.1"

);

### One big long line ... made readable
@arrayOIDSorted =                                                       
        map { $_->[0] }                                                     
              sort { $a->[1] cmp $b->[1] }                                    
                     map { [ $_,                                                  
                             join , map { sprintf("%8d",$_) } 
                             split( /\./, $_) 
                           ] 
                         } 
                     @arrayOID;      


   print "\nAfter OID Sort \n\n";
   $ptrN  = 0;   
   $entry = 1;
   while ( $arrayOIDSorted[$ptrN] )
   { 
      print "$entry | $arrayOIDSorted[$ptrN] |\n" ;
      $entry++;
      $ptrN++;
   }
   print "\nEnd OID Sort \n\n";
                          
      1. =========================================
  1. After OID Sort
  2. 1 | .1.3.6.1.4.1.11.2.17.19.2.0.9 |
  3. 2 | .1.3.6.1.4.1.11.2.17.19.2.0.79 |
  4. 3 | .1.3.6.1.4.1.11.2.17.19.3.4.0.1 |
  5. 4 | .1.3.6.1.4.1.11.2.17.19.3.4.0.2 |
  6. 5 | .1.3.6.1.4.1.11.2.17.19.3.4.0.3 |
  7. 6 | .1.3.6.1.4.1.11.2.17.19.3.4.0.4 |
  8. 7 | .1.3.6.1.4.1.11.2.17.19.3.4.0.10 |
  9. 8 | .1.3.6.1.4.1.11.2.17.19.3.4.0.19 |
  10. 9 | .1.3.6.1.4.1.11.2.17.19.3.4.0.22 |
  11. 10 | .1.3.6.1.4.1.11.2.17.19.3.4.0.25 |
  12. 11 | .1.3.6.1.4.1.11.2.17.19.3.4.0.31 |
  13. 12 | .1.3.6.1.4.1.11.2.17.19.3.4.0.32 |
  14. 13 | .1.3.6.1.4.1.11.2.17.3773.0.1 |
  15. 14 | .1.3.6.1.4.1.11.2.17.3773.0.2 |
  16. 15 | .1.3.6.1.4.1.11150.3.4.0.1 |
  17. 16 | .1.3.6.1.4.1.11150.3.4.0.2 |
  18. 17 | .1.3.6.1.4.1.11150.3.4.0.11 |
  19. 18 | .1.3.6.1.4.1.11150.3.4.0.21 |
  20. End OID Sort
  21. ===========================================

/<lang perl>