tuc

tuc extends the familiar cut command with capabilities that the POSIX original lacks. It supports positive and negative field indexes, ranges, field reordering, and multi-character or regex delimiters — all things that make cut awkward or impossible for real-world data.

tuc cutting and reformatting fields from stdin
tuc cutting and reformatting fields from stdin

Output formatting goes beyond simple field extraction. You can join selected fields with a custom delimiter, replace the original delimiter in the output, emit fields as a JSON array, or use {} placeholder syntax to construct arbitrary output strings from named fields.

tuc can cut by fields, bytes, characters, or lines, and handles UTF-8 correctly throughout. It also supports memory-mapped files for efficient processing of large inputs and NUL-terminated input for working with null-delimited data streams.

Basic usage

echo "foo bar baz" | tuc -d ' ' -f 3,2,1    # Reorder fields: baz bar foo.
echo "foo bar baz" | tuc -d ' ' -f '{1}, {2} and {3}'  # Format output.
echo "foo bar baz" | tuc -d ' ' --json        # Emit as a JSON array.
echo "a,b, c"     | tuc -e '[, ]+' -f 1,3    # Use a regex delimiter.
printf "a\nb\nc\nd\ne" | tuc -l 2:-2          # Cut lines with a negative index.