У меня есть текстовый файл с разделителями табуляции с именем «data.txt», который выглядит как
data.txt
col2 col3 col4 col1
val1 val5 val9 val13
val2 val6 val10 val14
val3 val7 val11 val15
val4 val8 val12 val16
...
, и у меня есть массив col_order = [col1, col2, col3, col4]
Цель состоит в том, чтобы переставить столбцы в «data.txt» в соответствии с порядком в массиве «col_order» , используя скрипт оболочки .
Окончательный вывод
col1 col2 col3 col4
val13 val1 val5 val9
val14 val2 val6 val10
val15 val3 val7 val11
val16 val4 val8 val12
Мой прогресс на данный момент
awk 'BEGIN{ORS=RS="\n"; S=OFS="\t"}{for (i=1; i<=NF; i++) {f[$i] = i}{ print $(f["col1"]),$(f["col2"]),$(f["col3"]),$(f["col4"])}}' data.txt> data_corrected.txt
Вышеприведенный оператор работает, как и ожидалось, но порядок жестко закодирован в операторе. Не удалось выяснить, как взять заказ из массива и передать его в операторе.
Я открыт для любого другого подхода.