Как суммировать числа внутри многих 2D-массивов

Мне нужно суммировать числа, расположенные в файле, подобном этому:

column1 column2 column3 row1 a(1,1) a(1,2) a(1,3) row2 a(2,1) a(2,2) a(2,3) row3 a(3,1) a(3,2) a(3,3) row4 a(4,1) a(4,2) a(4,3) column4 column5 column6 row1 b(1,1) b(1,2) b(1,3) row2 b(2,1) b(2,2) b(2,3) row3 b(3,1) b(3,2) b(3,3) row4 b(4,1) b(4,2) b(4,3) column7 column8 column9 row1 c(1,1) c(1,2) c(1,3) row2 c(2,1) c(2,2) c(2,3) row3 c(3,1) c(3,2) c(3,3) row4 c(4,1) c(4,2) c(4,3) 

и для вывода такой вещи:

  column1 a(1,1)+a(2,1) a(3,1)+a(4,1) column2 a(1,2)+a(2,2) a(3,2)+a(4,2) column3 a(1,3)+a(2,3) a(3,3)+a(4,3) column4 b(1,1)+b(2,1) b(3,1)+b(4,1) column5 b(1,2)+b(2,2) b(3,2)+b(4,2) column6 b(1,3)+b(2,3) b(3,3)+b(4,3) column7 c(1,1)+c(2,1) c(3,1)+c(4,1) column8 c(1,2)+c(2,2) c(3,2)+c(4,2) column9 c(1,3)+c(2,3) c(3,3)+c(4,3) 

У меня есть один способ сделать это в bash, но он работает только с двумя 2D-массивами и не работает с этим примером, который содержит три 2D-массива. Я хочу что-то, что может быть полезно для многих 2D-массивов. Здесь сценарий, который работает только для двух 2D-массивов.

  sed 's/row[1-6]//;/^$/d' test | pr -2t | awk 'NR==1{$1=$1; print; next} !(NR%2){split($0,a); next} {for(i=1;i<=NF;i++) $i+=a[i]}1' | tr ' ' '\n' | pr -3t 

Примечание. Чтобы вычислить суммы, замените индексы ячеек на следующие значения:

  $ tr -d 'ab(,)' < file > filenums 

One Solution collect form web for “Как суммировать числа внутри многих 2D-массивов”

Я предполагаю, что трюк состоит в том, чтобы использовать -3t для первого pr , а затем добавить -w200 (или так), чтобы избежать обрезания последнего столбца.

В более общем случае, если у вас есть N матриц, вы должны использовать pr -${N}t -w $((N*W)) качестве первой команды pr , где W – ширина символа одной матрицы (скажем, примерно 10 для каждого столбца плюс бит).

Все остальное должно быть хорошо.

  • Выполнение нескольких вызовов в программе с помощью сценария оболочки bash
  • перемещение (файл | каталог), избегая конфликтов имен файлов
  • Файл не найден (cygwin в Windows)
  • Преобразование строки ввода в дату в сценарии оболочки
  • Скрипт для перезапуска сети
  • Блокировка в сценарии оболочки
  • Как узнать, есть ли подходящие символы в строке?
  • Серийный разделитель после использования AWK
  • Как получить дополнительную информацию о происхождении кода выхода?
  • Bash назначает вывод / ошибку переменной
  • Найти последнюю строку файла для соответствия строки?
  • Копирование / переименование нескольких файлов с использованием регулярного выражения (сценарий оболочки)
  • Linux и Unix - лучшая ОС в мире.