クリップボードにコピーしました!
文字列のawk

awkコマンドで列と行の合計を算出する

updated: 2026/04/15 created: 2026/04/15

はじめに

テキストデータの集計作業は、エンジニアにとって避けて通れない作業のひとつです。特にログや数値データを扱う場面では、「合計」を素早く求めたいケースが頻繁にあります。そこで活躍するのがawkコマンドです。awkを使えば、複雑なプログラムを書かなくてもシンプルな記述で効率よく合計処理ができます。

本記事では、awk初心者の方でも理解できるように、基本的な合計の取り方から応用的な使い方まで丁寧に解説します。つまずきやすいポイントにも触れているので、実践しながら理解を深めていきましょう。

参考: GNU awk

awkで2列目の合計を計算する基本構造

今回使用するコマンドは以下です。

awk '{sum += $2} END {print sum}' input.txt

このコマンドは「2列目の値だけを順番に足し合わせて、最後に合計を表示する」という処理を行います。

$22列目の値を取得
sum += $2値を変数sumに加算
END {print sum}すべての行を処理した後に合計を出力

awkでは、1行ずつ処理しながら値を蓄積していくのが基本の流れです。

実行前の状態(input.txt)

4 2 4
7 3 5

このようにスペース区切りで3列の数値が並んでいます。

実行後の状態(input.txtを使用)

5

2列目の「2」と「3」が合計され、結果は「5」になります。

実行画像

全列の合計

使用コマンド:

awk '{for(i=1; i<=NF; i++) sum[i] += $i} END {for(i=1; i<=NF; i++){ printf "sum%d:%d ", i, sum[i]} printf "\n"}' input.txt

仕組みの解説

NFその行の列数
for(i=1; i<=NF; i++)全列をループ
sum[i] += $i列ごとに配列で合計を管理

このコマンドにより、各列ごとの合計が計算されます。

出力例:

sum1:11 sum2:5 sum3:9

行ごとの合計

使用コマンド:

awk '{ sum = 0; for(i=1; i<=NF; i++) sum += $i } { printf "sum:%d\n", sum }' input.txt

仕組みの解説

行ごとにsumをリセット
各列をループして足し算
行単位で合計を出力

出力例:

sum:10
sum:15

具体的な利用シーン

CSVファイルの集計(input.csv)

awk -F, '{for(i=1; i<=NF; i++) sum[i] += $i} END {for(i=1; i<=NF; i++){ printf "sum%d:%d ", i, sum[i]} printf "\n"}' input.csv

仕組み

-F,で区切り文字をカンマに変更
CSV形式でも列ごとの合計が可能

Apacheログのレスポンスサイズ合計(access_log)

例:access_log

127.0.0.1 - - [date] "GET /index.html HTTP/1.1" 200 512
127.0.0.1 - - [date] "GET /img.png HTTP/1.1" 404 256
127.0.0.1 - - [date] "GET /home HTTP/1.1" 200 1024

使用コマンド:

awk '{for(i=1;i<=NF;i++) if($i == "200") sum += $(i+1)} END {printf "response size sum: %d\n", sum }' 'access_log'

仕組み

ステータスコード200を検出
その直後のフィールド(レスポンスサイズ)を加算

不動小数点の合計(input.txt)

awk '{sum += $1} END {printf "sum: %.2f\n", sum}' input.txt

仕組み

小数を含む値も正確に合計
%.2fで小数点2桁表示

失敗例

1. 列番号の指定ミス

$2の代わりに$3など誤った列を指定すると、意図しない合計になります。

2. 区切り文字を指定しない

CSVなのに-F,を指定しないと、正しく列が分割されません。

3. sumの初期化忘れ

行ごとの合計でsum = 0を忘れると、前の行の値が累積されてしまいます。

まとめ

awkを使った合計処理は、シンプルながら非常に強力です。基本を理解すれば、ログ解析やデータ処理の効率が大きく向上します。まずは今回のコマンドを実際に試しながら、徐々に応用へとステップアップしていきましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

©︎ 2025-2026 running terminal commands