2014-01-24 2 views
4

Я хочу рассчитать сумму определенного столбца, используя bash, не используя печать этого конкретного столбца (я хочу сохранить все выходные столбцы моего конвейера и только суммировать один из них!)Как я могу вычислить сумму конкретного столбца с помощью bash?

+5

Например, несколько строк ввода и желаемого вывода. – grebneke

ответ

7

Если вы хотите просуммировать, скажем, второй столбец, но печатать все столбцы в какой-то трубопровод:

cat data | awk '{sum+=$2 ; print $0} END{print "sum=",sum}' 

Если данные файла выглядят так:

1 2 3 
4 5 6 
7 8 9 

Тогда выход woul d быть:

1 2 3 
4 5 6 
7 8 9 
sum= 15 
1

Хотите ли вы постоянно суммировать один столбец, шаг за шагом?

ли это должен быть bash или вы можете использовать awk:

# file 'fields.txt': 
1 foo 
2 bar 
10 baz 
8 boz 

# Step by step sum the first column: 
awk '{s+=$1; print s, $2}' < fields.txt 

# Output: 
1 foo 
3 bar 
13 baz 
21 boz 
0

Предполагая, что одни и те же входные данные, как @ John1024, вы можете использовать старый добрый cut и paste и некоторые арифметику:

$ cat data | echo $(($(cut -d' ' -f2 | paste -s -d+ -))) 
15 
$ 

Хитрость здесь, чтобы сказать paste вставить + в качестве разделителя, затем выполните арифметику bash с использованием $(()) по полученному выражению.

Примечание. Я просто cat ввод входных данных для иллюстративных целей - он может быть передан из другого источника или файла данных, переданного непосредственно на cut.

0
awk '{sum+=$1;} END { print "Total of 1st Column:" sum }1' abc.t6RrMm 

Учитывая файл, как:

12 12 12 
1 1 1 
2 2 1 
0 1 2 

Всего 1 Колонку 15.

Смежные вопросы