Вы работали с 2-мерными массивами? После того, как данные были загружены в массив (например, arr [x, y]), операция «transpose» будет просто состоять из циклического перемещения по индексам y и x.
Я нахожу массивы в awk
длябыть немного легче работать с массивами в bash
;Вот подсказка awk
:
awk '
BEGIN { arr[1][1]="a" ; arr[1][2]="b"
arr[2][1]="c" ; arr[2][2]="d"
}
END { printf "+++++++++++ as is\n"
for (x in arr)
{ for (y in arr[x])
{ printf "%s ",arr[x][y] }
printf "\n"
}
printf "+++++++++++ transposed\n"
for (x in arr)
{ for (y in arr[x])
{ printf "%s ",arr[y][x] }
printf "\n"
}
printf "+++++++++++\n"
}
' m1
+++++++++++ as is
a b
c d
+++++++++++ transposed
a c
b d
+++++++++++
В вашем случае вы захотите заменить весь блок BEGIN
кодом, который заполняет массив (arr[][]
) данными из вашего файла;дополнительный совет: найдите переменные awk
'NF' и 'NR'.
Решение на основе awk
имеет дополнительное преимущество, заключающееся в том, что оно сканирует входной файл только один раз;и поскольку файловый ввод-вывод влечет за собой (относительную) высокую нагрузку, чем меньше времени вам придется обрабатывать файл, тем быстрее будет выполняться ваш код.