GNU datamashの使い方
datamashはデータ集計ができるコマンドツールである.オープンソースソフトウェアとして開発されている.利点はシンプルなオプションで大量のデータを高速に処理できることである.
datamash - GNU Project - Free Software Foundation
インストール
UbuntuやDebianの場合,datamashを以下のコマンドでインストールできる.
sudo apt install datamash
使い方
以下に入力データとコマンドのペアを示す.
使い方(a) 1列のファイルの集計
以下の入力ファイル input.txtがある.
$ cat input.txt
26546
2980
17297
32198
3620
7136
12704
1373
23366
22880
このファイルから最大値を求めるには以下のコマンドを実行する.
$ datamash max 1 < input.txt
32198
このファイルから最大値,平均値,最小値を求めるには以下のコマンドを実行する.
$ cat input.txt | datamash max 1 mean 1 min 1
32198 15010 1373
使い方(b) 2列のファイルの集計
以下にタブ区切りの入力ファイル input.tsvがある.
japan 21215
korea 27452
china 23555
japan 20783
korea 9098
china 28205
japan 20090
korea 26355
china 25716
このファイルから2列目の値の最大値を求めるには以下のコマンドを実行する.
$ cat input.tsv | datamash max 2
28205
このファイルから1列目の値ごとに,2列目の値の最大値を求めるには以下のコマンドを実行する.
ポイントは集計する列(1列目)のデータでソートしてから,datamashでデータの集計することである.
ここではソートにsortコマンドを使用している.sortコマンドの -k
は指定した列で集計をするオプションである.
datamashコマンドの -g
は集計する列(1列目)を指定するオプションである.
$ cat input.tsv | sort -k 1 | datamash -g 1 max 2
china 28205
japan 21215
korea 27452
使い方(c) 3列以上のファイルの集計
以下にタブ区切りの入力ファイル input.tsvがある.
winter orange 11930
winter apple 13004
winter grape 1322
spring orange 1377
winter orange 13914
summer grape 15283
spring apple 16408
winter apple 16763
summer grape 16857
summer orange 16889
winter orange 2014
spring grape 20279
spring orange 22078
summer orange 22653
spring grape 23084
summer orange 23551
spring orange 2359
summer apple 26249
summer grape 28625
summer apple 29283
spring apple 29721
winter apple 29829
spring grape 3390
winter grape 3898
winter grape 4993
summer apple 6862
spring apple 9160
このファイルから1列目の値と2列目の値ごとに集計し,3列目の値の平均値を求めるには以下のコマンドを実行する.
$ cat input.tsv | sort -k 1,1 -k 2n | datamash -g 1,2 mean 3
spring apple 18429.666666667
spring grape 15584.333333333
spring orange 8604.6666666667
summer apple 20798
summer grape 20255
summer orange 21031
winter apple 19865.333333333
winter grape 3404.3333333333
winter orange 9286
注意点
sortコマンドが意図した動作をしなかった.調べたところ,オプション -k
の使い方に問題があった.