команда bash для суммирования и печати каждого элемента столбца и печати нового столбца

Какую команду следует использовать для суммирования значений двух определенных столбцов? Например, у меня есть файл:

1 4 5 1
2 3 5 2
7 8 6 3

И я хочу суммировать второй и последний столбцы, чтобы получить следующий результат

1 4 5 1 5
2 3 5 2 5
7 8 6 3 11

Должен ли я использовать awk и bc? Я нашел много примеров, чтобы суммировать всю колонку...


person ziulfer    schedule 12.02.2013    source источник


Ответы (4)


Пытаться:

awk '{print $0, $2 + $NF }' input_file
person Hui Zheng    schedule 12.02.2013

Поскольку вы отметили вопрос bash (наиболее подходящим инструментом является awk!)

#!/bin/bash

while read -a ARRAY
do
    echo ${ARRAY[@]} $((${ARRAY[1]}+${ARRAY[3]}))
done < input.txt

выход:

$ ./sum.sh 
1 4 5 1 5
2 3 5 2 5
7 8 6 3 11
person Fredrik Pihl    schedule 12.02.2013

Вот команда для выполнения того, что вы хотите:

awk '{$(NF+1)=$NF+$2}1' <filename
person anishsane    schedule 12.02.2013

Для простых расчетов лучше всего подойдет awk. В более сложных ситуациях вы можете захотеть распараллелить операцию, вы можете сделать это с помощью GNU parallel и калькулятора по вашему выбору.

С bash:

<infile parallel --colsep ' +' echo '{}' '$(( {2} + {4} ))

С bash и bc:

<infile parallel --colsep ' +' echo '{}' '$(bc <<< "{2} + {4}")'

Обратите внимание, что в текущем выпуске parallel нет простого способа сослаться на последний элемент ввода, однако сейчас в ветке разработки находится патч, который позволяет отрицательную индексацию элементов, т. е. тогда вы сможете использовать {-1} вместо {4}.

person Thor    schedule 13.02.2013