読者です 読者をやめる 読者になる 読者になる

テキストファイルの中に書かれた数字をコマンドラインで集計する方法

何らかの文字で区切られたデータファイルがあって、その中の特定のカラムの合計を計算したいとします。

たとえばデータファイルは以下のような感じです。

$ cat datafile.dat
data1: 0, 123, 222, "some text"
data34: 11, 3, 24, "another text"
data209: 456, 99, 76, "hoge fuga"
  :

この中の、"text" という文字列が含まれている行だけ、123, 3, ... と縦に並んでいる部分を合計したいとします。

そこで、まず "text" という文字列が含まれている行だけを grep で抜き出します。

$ cat datafile.dat | grep text
data1: 0, 123, 222, "some text"
data34: 11, 3, 24, "another text"
  :

次に、123, 3, ... の列だけ抜き出します。

$ cat datafile.dat | grep text | cut -f 3 -d ':' -d ','
 123
 3
  :

awk でもできると思いますが cut を使ってみました。
'-d' を繰り返すことで区切り文字を複数指定できます。(上記の例では : を区切り文字にしなくても -f 2 -d ',' でもうまく行くと思いますが、あくまでも例なので、、、)
空白も取り除きたければ -d ' ' として空白も区切り文字に入れてしまうこともできます。

これを足し算の式にします。

$ cat datafile.dat | grep text | cut -f 3 -d ':' -d ',' | paste -sd+
 123+ 3 ...

最後に bc に食わせて計算します。

$ cat datafile.dat | grep text | cut -f 3 -d ':' -d ',' | paste -sd+ | bc
5586

以上、自分用メモでした。