В файле с различным количеством столбцов, разделенных пробелом '', Как посчитать сумму столбцов. Пример показал бы необходимость:
File A:
1 2
2 3
4 5 6
1 1 1 5
Тогда результат будет:
- для столбца 1 (1 + 2 + 4 + 1) = 8
- для столбца 2 - 11
- для колонки 3 - 7
- для колонки 4 - 5
command-line
scripts
Maythux
источник
источник
Используйте
numsum
для этой задачи и отделите между обработкой данных и выводом результатов.Установить
num-utils
, нам нужноnumsum
И начать с
пример
или с вашим желаемым форматом:
от
man numsum
примеры из
man numsum
источник
источник
(( col1 += a ))
и т. Д. Такжеecho "..."
безопаснее, как иwhile IFS= read -r ...
echo
безопасно использовать таким образом, чтобы отображать числа,$IFS
значения по умолчанию в пробелах, и ожидается, что они будут числами, поэтому нет необходимости иметь обратную косую черту. Единственным недостатком этого ответа является необходимость знать количество столбцов до выполнения.echo "[...]"
для правильной печати того, что вы не хотите выводить, не имеет смысла.echo $var
иwhile read a b c
это работает здесь. Тем не менее, вы привыкнете писать его слабо, и однажды вы получите странные ошибки при обработке более сложного файла. Тогда вы заметите, что цитируете переменные, и использованиеwhile IFS= read -r ...
было безопаснее и скажет: «О да, Федорки был прав, я надеюсь, что он мог бы обнять его, чтобы выразить благодарность!».Судя по комментариям к вашему собственному ответу, вам нужна только сумма по одному столбцу за раз. Если это так, вот не-awk способ сделать это:
где вы могли бы заменить
3
интересующий вас номер столбца.источник
Вот однострочный подход к Perl-скрипту. Это основано на использовании
-a
флага, который позволяет автоматически разбивать текущую строку с-n
флагом в массив@F
. Все, что нам нужно сделать, это перебрать эти элементы и добавить их к соответствующему индексу в$sum
массиве, таким образом, фактически каждый элемент массива является суммой для каждого соответствующего столбца. Наконец, мы печатаем результат вEND
блоке кода.В качестве альтернативы приведем полный подход к сценарию Perl. Он основывается на разбиении каждой строки на массив и итерации по каждому элементу в этом массиве, добавляя каждое число к их соответствующей возможности в
@sums
массиве. Сценарий распечатывает каждую строку, а затем создает отчет для каждого столбца. Печать каждой строки можно удалить, добавив#
передprintf("%s",$line);
Использование простое
chmod +x ./sum_columns.pl && ./sum_columns.pl input.txt
. Например:источник
Простое решение:
Замените i номером столбца, например column1:
вывод:
источник