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コマンドの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。
リンク