Не могли бы вы попробовать следующее, так как ни один из произведенных образцов не может быть протестирован.Вам НЕ нужно вручную писать 1...10
значения полей, для этого вы также можете использовать цикл.
awk 'BEGIN{FS=OFS="\t"}{for(i=1;i<=10;i++){printf("%s%s",$i,OFS)};for(i=(NF-27);i<=NF;i++){printf("%s%s",$i,i==NF?ORS:OFS)}}' Input_file > output_file
Также вам не нужно беспокоиться о заголовках здесь, так как мы просто печатаем строки, а не логику специальноприменяется для строк, поэтому нет необходимости добавлять какую-либо конкретную запись для 1-й строки или около того.
РЕДАКТИРОВАТЬ: 1 еще один пункт здесь, кажется, вы имели в виду, что разные значения столбца (вразличные диапазоны) должны приходить в одну строку (для одной строки из Input), если это так, то мой код выше должен обрабатывать это, так как я печатаю пробелы в качестве разделителя для их значений и печатаю новые только тогда, когда значение их последнего поля равнонапечатано, что каждая строка из полей Input_file будет находиться на той же строке (что и запись Input_file).
Объяснение: Добавление подробного объяснения здесь.
awk ' ##Starting awk program here.
BEGIN{ ##Starting BEGIN section here, which will be executed before Input_file is getting read.
FS=OFS="\t" ##Setting FS and OFS as TAB here.
} ##Closing BEGIN section here for this awk code.
{ ##Starting a new BLOCK which will be executed when Input_file is being read.
for(i=1;i<=10;i++){ ##Running a for loop which will run 10 times from i=1 to i=10 value.
printf("%s%s",$i,OFS) ##Printing value of specific field with OFS value.
} ##Closing for loop BLOCK here.
for(i=(NF-27);i<=NF;i++){ ##Starting a for loop which will run for 27 last fields only as per OP requirements.
printf("%s%s",$i,i==NF?ORS:OFS) ##Printing field value and checking condition i==NF, if field is last field of line print new line else print space.
} ##Closing block for, for loop now.
}' Input_file > output_file ##Mentioning Input_file name here, whose output is going into output_file.