awk で各列毎に数値を足し算する方法

目次

スポンサードリンク

awk の基本構文

awk をワンライナーで実行する場合の基本構文は以下の通りです。 引数で指定したファイル、または、標準入力で指定したデータを対象とし、パターンにマッチした行に対し、処理を実行します。パターンは省略でき省略時は全ての行が対象になります。

awk パターン { 処理 } ファイルパス
コマンド | awk パターン { 処理 }

各列毎に数値を足し算する方法

awk の処理では演算子を使用することができ、各列の数値を足す際は、+= 演算子を使います。

サンプルで使用するデータは、ls -l コマンドで表示した以下のファイル一覧とします。 5列目にある各ファイルのサイズを合計してみます。

[root@hostname logs]# ls -l
合計 23652
-rw-r--r-- 1 root root        0  3月 13 15:35 access_log
-rw-r--r-- 1 root root   231864  4月 23 11:52 deflate_log
-rw-r--r-- 1 root root   802377  4月 25 11:52 error_log
-rw-r--r-- 1 root root    60062  4月 23 11:52 origin-access_log
-rw-r--r-- 1 root root   125421  4月 23 11:52 origin-error_log
-rw-r--r-- 1 root root  1455615  4月 23 11:52 ssl-access_log
-rw-r--r-- 1 root root   129839  3月 26 17:41 ssl-app_log
-rw-r--r-- 1 root root 21390785  4月 23 11:52 ssl-error_log

まずは、5列名のデータだけ表示してみます。処理部分を print $5 にすることでファイルサイズのみを抽出することができました。

[root@hostname logs]# ls -l | awk '{ print  $5 }'

0
231864
802377
60062
125421
1455615
129839
21390785

以下の記述でファイルサイズを加算した結果を表示できます。

[root@hostname logs]# ls -l | awk '{ sum += $5 } END { print  sum }'
24195963

{ sum += $5 } は、+= 演算子で、変数 sum に ファイルサイズを加算していきます。$5 でファイルサイズの列を指定しています。
END { … } の指定は、最後に1度だけ処理を実行するという指定です。一番最後に、変数 sum の値を出力しています。



プログラミング言語AWK
AWK 言語作者による解説本。名著。

Linuxコマンドについて学べるおすすめ書籍
Linuxコマンドの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。

関連記事