Python cut.py
import argparse
import sys
def cut(fields, delimiter, input_file):
"""
Extract specified fields or columns from the input file or standard input.
:param fields: Comma-separated list of fields to extract (1-based indexing).
:param delimiter: Delimiter used to separate fields.
:param input_file: Input file path or None for standard input.
"""
# Parse the fields to extract
try:
field_indices = [int(f) - 1 for f in fields.split(",")]
except ValueError:
print("Error: Fields must be integers.", file=sys.stderr)
sys.exit(1)
# Open the input file or use standard input
input_source = open(input_file, "r") if input_file else sys.stdin
try:
for line in input_source:
# Split the line using the specified delimiter
parts = line.rstrip().split(delimiter)
# Extract the specified fields and print them
try:
output = delimiter.join([parts[i] for i in field_indices])
print(output)
except IndexError:
print("Error: Field index out of range.", file=sys.stderr)
finally:
if input_file:
input_source.close()
def main():
parser = argparse.ArgumentParser(description="Python implementation of the cut command.")
parser.add_argument("-f", "--fields", required=True, help="Comma-separated list of fields to extract (1-based indexing).")
parser.add_argument("-d", "--delimiter", default="\t", help="Delimiter used to separate fields (default: tab).")
parser.add_argument("-i", "--input", help="Input file path (default: standard input).")
args = parser.parse_args()
cut(fields=args.fields, delimiter=args.delimiter, input_file=args.input)
if __name__ == "__main__":
main()