#!/usr/local/cpython-3.4/bin/python3 '''Copy every nth line from stdin to stdout''' import sys import itertools def usage(retval): '''Output a usage message''' if retval == 0: file_ = sys.stdout else: file_ = sys.stderr file_.write('Usage: {} -n nth\n'.format(sys.argv[0])) file_.write('Output every nth line\n') sys.exit(retval) def main(): '''main function''' number = 1 while sys.argv[1:]: if sys.argv[1] == '-n': number = int(sys.argv[2]) del sys.argv[1] elif sys.argv[1] in ['-h', '--help']: usage(0) else: sys.stderr.write('{}: Unrecognized option: {}\n'.format(sys.argv[0], sys.argv[1])) usage(1) del sys.argv[1] process(sys.stdin, sys.stdout, number) def process(infile, outfile, number): '''Read from infile, write to outfile, only actually copying every number-th line''' number_minus_1 = number - 1 for counter, line in zip(itertools.cycle(range(number)), infile): if counter == number_minus_1: outfile.write(line) main()