assert all(column.lstrip("-").upper() in columns for column in sortColumns)
sortColumnIdxs = tuple(columns.index(column.lstrip("-").upper()) for column in sortColumns)
jobs = sorted(jobs, key = lambda job: tuple(job[columnIdx] if not column.startswith("-") else reversor(job[columnIdx]) for column, columnIdx in zip(sortColumns, sortColumnIdxs)))
sortColumns = tuple(column[1:] if column.startswith("-") else column for column in sortColumnsRaw)
sortColumnAsc = tuple(not column.startswith("-") for column in sortColumnsRaw)
assert all(column.upper() in columns for column in sortColumns)
sortColumnIdxs = tuple(columns.index(column.upper()) for column in sortColumns)
if not "'${dates}'":
sortColumnAsc = tuple(not columnAsc if 4 <= columnIdx <= 6 else columnAsc for columnAsc, columnIdx in zip(sortColumnAsc, sortColumnIdxs))
jobs = sorted(jobs, key = lambda job: tuple(job[columnIdx] if columnAsc else reversor(job[columnIdx]) for column, columnAsc, columnIdx in zip(sortColumns, sortColumnAsc, sortColumnIdxs)))
# Print
print("\t".join(columns))
for job in jobs:
job[4] = time_ago(job[4])
job[5] = time_ago(job[5])
job[6] = (coloured_time_ago if not "'${nocolours}'" else time_ago)(job[6])
job[4] = render_date(job[4])
job[5] = render_date(job[5])
job[6] = render_date(job[6], coloured = not "'${nocolours}'")