Суммируйте значения в столбце кроме заголовка

То, что необходимо сделать, указывают который закрытый ключ использовать в ~/.ssh/config файл. например:

Host server1.nixcraft.com
    IdentityFile ~/backups/.ssh/id_dsa
Host server2.nixcraft.com
    IdentityFile /backup/home/userName/.ssh/id_rsa
9
15.10.2013, 01:50
7 ответов
awk '{s+=$3}END{print s}' yourfile
12
27.01.2020, 20:04
  • 1
    @coffeMug может Вы объяснять почему использование это: s+0?. –  Cold 15.12.2014, 17:32
  • 2
    @Cold не помнит точно, почему тот 0 там!:-P Кажется, является ненужным так удалил его! –  coffeMug 15.12.2014, 21:43
  • 3
    @coffeMug OP, вероятно, чтобы гарантировать, что awk рассматривал аргумент как число –  Thorbjørn Ravn Andersen 09.05.2017, 14:40

Довольно тривиальное использование просто awk. Принятие данных в качестве примера находится в файле, ex.txt:

$ awk '{total = total + int($3)}END{print "Total Amount collected = "total}' ex.txt

Пример

$ awk '{total = total + $3}END{print "Total Amount collected = "total}' ex.txt 
Total Amount collected = 95657

Подробнее

Используя awk мы собираем значения из 3-го столбца ($3) и накопите их промежуточный итог в переменной total. После того как завершенный, как последняя вещь сделать, END{..}, мы печатаем сообщение наряду со значением переменной total.

5
27.01.2020, 20:04
  • 1
    просто делает, каждый изменяется int($3) –  Rahul Patil 15.10.2013, 09:45
total=0; 
for n in  $( tail -n +4 /tmp/reports.txt | awk '{print $3}') ; 
do 
   total=$( expr $total + $n ); 
done ; 
echo ">>$total" 
2
27.01.2020, 20:04
  • 1
    Вы не можете изменить значение переменной в цикле как этот. См. мой ответ здесь для способа сделать переменные доступными вне их loop.s –  terdon♦ 14.10.2013, 23:57

Этот конвейер должен сделать работу:

tail -n +4 the_file | awk '{ sum += $3 } END { printf "Total Amount collected = %d\n", sum }'
0
27.01.2020, 20:04

awk подход является, вероятно, самым легким. Вот несколько других вариантов:

Perl:

perl -lane '$k+=$F[2];END{print $k}' foo.txt

Чистый coreutils:

t=0; tail -n +4 foo.txt | tr -s ' ' '\t' | cut -d $'\t' -f 3 | 
 while read i; do let t+=$i; echo $t; done  | tail -n 1
2
27.01.2020, 20:04

Если это поможет:

grep -Eo '[0-9\.]+' your_file|tr '\n' '+'|sed 's/\+$//'|bc -l
2
27.01.2020, 20:04
awk '{FS=","}{s+=$6}END{print s}' Filename
-1
27.01.2020, 20:04

Теги

Похожие вопросы