コンテンツにスキップ

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