Home | History | Annotate | Download | only in comparisons
      1 #! /usr/bin/env python
      2 
      3 # 2)  Sorting Test
      4 #
      5 #     Sort an input file that consists of lines like this
      6 #
      7 #         var1=23 other=14 ditto=23 fred=2
      8 #
      9 #     such that each output line is sorted WRT to the number.  Order
     10 #     of output lines does not change.  Resolve collisions using the
     11 #     variable name.   e.g.
     12 #
     13 #         fred=2 other=14 ditto=23 var1=23
     14 #
     15 #     Lines may be up to several kilobytes in length and contain
     16 #     zillions of variables.
     17 
     18 # This implementation:
     19 # - Reads stdin, writes stdout
     20 # - Uses any amount of whitespace to separate fields
     21 # - Allows signed numbers
     22 # - Treats illegally formatted fields as field=0
     23 # - Outputs the sorted fields with exactly one space between them
     24 # - Handles blank input lines correctly
     25 
     26 import re
     27 import sys
     28 
     29 def main():
     30     prog = re.compile('^(.*)=([-+]?[0-9]+)')
     31     def makekey(item, prog=prog):
     32         match = prog.match(item)
     33         if match:
     34             var, num = match.groups()
     35             return int(num), var
     36         else:
     37             # Bad input -- pretend it's a var with value 0
     38             return 0, item
     39     for line in sys.stdin:
     40         items = sorted(makekey(item) for item in line.split())
     41         for num, var in items:
     42             print "%s=%s" % (var, num),
     43         print
     44 
     45 main()
     46