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 の使い方に問題があった.

sortコマンドで複数キーによるソート - あらびき日記

参考URL