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