#!/usr/bin/env bash awk -v n_spaces="$1" ' BEGIN { tab = " " space = " " if (n_spaces < 1) n_spaces = 4 } function spaces_to_tabs(line) { n_leading_spaces = 0 for (i = 1; i <= length(line); i += 1) { if (substr(line, i, 1) != space) break n_leading_spaces += 1 } if ( (0 < n_leading_spaces) && (n_leading_spaces < n_spaces) ) n_tabs = 1 else n_tabs = int(n_leading_spaces / n_spaces) tabs = "" while (n_tabs--) tabs = tabs tab return tabs substr(line, i) } { print spaces_to_tabs($0) } '