Puede bucle sobre todas las columnas y filtrar los que no quieren:
awk '{for (i=1; i<=NF; i++) if (i<3 || i>29) printf $i " "; print""}' input.txt
donde el NF
le da el número total de campos de un registro.
Para cada columna que cumpla la condición imprimimos la columna seguida de un espacio " "
.
EDIT: actualizado después de la observación de johnny:
awk -F 'FS' 'BEGIN{FS="\t"}{for (i=1; i<=NF-1; i++) if(i<3 || i>5) {printf $i FS};{print $NF}}' input.txt
esto se mejoró en 2 formas:
- mantiene los separadores originales
- no añade un separador al final
Esta respuesta en stackoverflow puede ayudarle a: http://stackoverflow.com/questions/2626274/awk-print-all-other-columns-but-not-1-2-and-3 – iwg