Summing
Sum a numeric column
printf '%s\n' 1024 2048 512 4096 768 | awk '{sum += $1} END{print "Total:", sum}'
Average of a column
printf '%s\n' 23 45 12 67 89 34 | awk '{sum += $1; count++} END{print "Avg:", sum/count}'
Running total — cumulative sum
printf '%s\n' 150 320 85 410 275 | awk '{sum += $1; print $0, "Running:", sum}'
Group by first field, sum second field
cat <<'EOF' > /tmp/demo.txt
web-01 1024
db-01 2048
web-01 512
web-02 4096
db-01 768
web-02 2048
web-01 3072
EOF
awk '{sum[$1] += $2} END{for(k in sum) print k, sum[k]}' /tmp/demo.txt
Total bytes per IP from access log
cat <<'EOF' > /tmp/access.log
10.50.1.10 - - [11/Apr/2026:08:15:01 +0000] "GET /api/health HTTP/1.1" 200 512 "-" "curl/8.7"
10.50.1.20 - - [11/Apr/2026:08:15:03 +0000] "POST /api/auth HTTP/1.1" 200 2048 "-" "python/3.12"
10.50.1.10 - - [11/Apr/2026:08:15:05 +0000] "GET /api/users HTTP/1.1" 200 8192 "-" "curl/8.7"
10.50.1.30 - - [11/Apr/2026:08:15:08 +0000] "GET /static/logo.png HTTP/1.1" 200 34816 "-" "Mozilla/5.0"
10.50.1.10 - - [11/Apr/2026:08:15:10 +0000] "DELETE /api/sessions HTTP/1.1" 204 0 "-" "curl/8.7"
10.50.1.20 - - [11/Apr/2026:08:15:12 +0000] "GET /api/status HTTP/1.1" 200 1024 "-" "python/3.12"
EOF
awk '{bytes[$1] += $10} END{for(ip in bytes) printf "%-16s %d\n", ip, bytes[ip]}' /tmp/access.log | sort -k2 -rn
Disk usage summary from df
df -h | awk 'NR>1 {printf "%-30s Used:%-8s Avail:%-8s\n", $6, $3, $4}'
Sum column with header and footer
printf '%s\n' 1500 3200 850 4100 2750 | awk 'BEGIN{print "VALUE"} {sum+=$1; print $1} END{print "-----"; print sum}'
Percentage of total per line
printf '%s\n' 1500 3200 850 4100 2750 | awk '{a[NR]=$1; sum+=$1} END{for(i=1;i<=NR;i++) printf "%s %.2f%%\n", a[i], a[i]/sum*100}'