LoginSignup
1
2

More than 5 years have passed since last update.

awkで行の計算

Last updated at Posted at 2017-11-26

何がしたいか

とあるcsvには各行の各列に数値が入っていて、それらを合計したい
awkで出来そうだなぁ、と思ってはいたものの、なぜか躓いてしまい、すぐにやりたいことを出来なかったので自分用メモとして残しておく

データは下記のようなcsvフォーマットでたくさんのレコードがあるイメージ

test.csv
abc,123,0,234,0,0,456,567
abc,123,0,234,0,0,456,567
abc,123,0,234,0,0,456,567
abc,123,0,234,0,0,456,567

アウトプットのイメージ

output
abc,1380
abc,1380
abc,1380
abc,1380

どう解決したか

sample.sh
#!/bin/bash

FILE="test.csv"
cat $FILE | while read LINE
do
  ID=$(awk -F, '{ print $1 }' <<< $LINE)
  SUM=$(awk -F',' '{ for(i=2; i<NF+1; ++i){ sum+=$i } print sum }' <<< $LINE)
  echo "$ID,$SUM"
done

1行ずつ読み込む。LINEが1行ごとの変数になる
cat $FILE | while read LINE

IDを抜き出す(例の場合は"abc")。こういう書き方じゃなくてもいいかも知れないけれど、次でawkを使うので統一した
ID=$(awk -F, '{ print $1 }' <<< $LINE)

forを使い、2列目から最後の列までを足し、printで結果を表示する。が、それは変数SUMに代入される
SUM=$(awk -F',' '{ for(i=2; i<=NF+1; ++i){ sum+=$i } print sum }' <<< $LINE)

ちなみに

<<<はヒアストリング
<<はヒアドキュメント
読み方を知らなかったので、これもメモしておく

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2