paul@0 | 1 | #!/usr/bin/env python |
paul@0 | 2 | |
paul@0 | 3 | from simplex import * |
paul@0 | 4 | import sys, time |
paul@0 | 5 | |
paul@3 | 6 | try: |
paul@3 | 7 | separator = sys.argv.index("--") |
paul@7 | 8 | filename, numeric = sys.argv[1:3] |
paul@18 | 9 | fields = map(int, sys.argv[3:separator]) |
paul@18 | 10 | terms = groups(sys.argv[separator+1:], len(fields)) |
paul@3 | 11 | except (IndexError, ValueError): |
paul@25 | 12 | print >>sys.stderr, "Usage: %s <filename> <numeric> <field>... -- <term value>..." % sys.argv[0] |
paul@3 | 13 | sys.exit(1) |
paul@0 | 14 | |
paul@0 | 15 | f = open(filename) |
paul@18 | 16 | accessor = DelimitedRecord(fields, numeric=(numeric == "true")) |
paul@22 | 17 | |
paul@0 | 18 | try: |
paul@0 | 19 | for term in terms: |
paul@22 | 20 | |
paul@22 | 21 | # Convert the term to the appropriate type. |
paul@22 | 22 | |
paul@22 | 23 | term = accessor.convert(term) |
paul@22 | 24 | |
paul@22 | 25 | # Perform the search. |
paul@22 | 26 | |
paul@19 | 27 | f.seek(0) |
paul@0 | 28 | |
paul@0 | 29 | t = time.time() |
paul@26 | 30 | lines = find_in_file(f, accessor.get_key, term) |
paul@26 | 31 | if lines: |
paul@26 | 32 | print >>sys.stderr, "Found (at %s seconds)..." % (time.time() - t) |
paul@26 | 33 | for line in lines: |
paul@26 | 34 | sys.stdout.write(line) |
paul@0 | 35 | finally: |
paul@0 | 36 | f.close() |
paul@0 | 37 | |
paul@0 | 38 | # vim: tabstop=4 expandtab shiftwidth=4 |