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

目次

スポンサードリンク

awk の基本構文

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

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

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

サンプルで使用するデータは、以下のように数値が半角スペースで区切られて並んでいます。 この数値を各行毎に足し算した結果を表示します。

[root@hostname tmp]# cat data
1 2 3 4 5
10 20 30 40 50
-10 -20 -30 -40 50

以下の記述で各行の数値を加算した結果を表示できます。 半角ハイフンを付けると負の数として認識されました。

[root@hostname tmp]# cat data | awk '{ sum=0; for (i=1; i<=NF; i++) { sum+=$i } print sum; }'
15
150
-50

上記コマンドは、cat コマンドで出力したデータをパイプでawkに渡しています。

パイプの後に続く、awkのワンライナーでは、各行の処理の最初に変数sumを0で初期化しています。

for文は繰り返し処理を記述することができます。 for文では宣言しなくても使用できるビルトイン変数の NF を条件に使用しています。 NFは、現在行のフィールド数(Number of Fields) を表すので、このfor文では、その行のフィールド数分処理を繰り返すことになります。

処理 sum+=$i で、各フィールドの数値を変数sumに足しています。 $i の部分で何列目のフィールドかを指定しています。 $i の i はfor文で初期化した変数で繰り返しの度に1ずつ増えていきます。

最後に print分で変数sumに入った各行の合計値を出力しています。



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

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

関連記事