DATAMASH(1) User Commands DATAMASH(1) (NAME) datamash - (SYNOPSIS) datamash [OPTION] op [fld] [op fld ...] (DESCRIPTION) / stdin . op . . fld . (= ) -H --header-in . ( 1,6,8). ( 2-8). ( 'pcov 2:6'). : groupby, crosstab, transpose, reverse, check : rmdup : base64, debase64, md5, sha1, sha224, sha256, sha384, sha512, bin, strbin, round, floor, ceil, trunc, frac, dirname, basename, barename, extname, getnum, cut : sum, min, max, absmin, absmax, range /: count, first, last, rand, unique, collapse, countunique : mean, geomean, harmmean, trimmean, median, q1, q3, iqr, perc, mode, antimode, pstdev, sstdev, pvar, svar, ms, rms, mad, madraw, pskew, sskew, pkurt, skurt, dpo, jarque, scov, pcov, spearson, ppearson, dotprod (OPTIONS) : -C, --skip-comments ( '#' ';' ) -f, --full (: ) . GNU Datamash . -g, --group=X[,Y,Z] X,[Y,Z] 'groupby' --header-in --header-out -H, --headers '--header-in --header-out' --vnlog vnlog. -C -H -W -i, --ignore-case -s, --sort 'sort' -S, --seed (seed) -c, --collapse-delimiter=X X collapse unique (: ) : --no-strict --filler=X X (: N/A) : -t, --field-separator=X X TAB --format=FORMAT printf. --output-delimiter=X X (: -t/-W) --narm NA/NaN -R, --round=N N -W, --whitespace ( / ) -z, --zero-terminated 0 --sort-cmd=/path/to/sort sort(1) . -h, --help -V, --version (AVAILABLE OPERATIONS) (Primary Operations) . . - ( ' ') ( ). . groupby X,Y,... op fld ... . '-g'. op fld . crosstab X,Y [op fld ...] ( pivot table ). X,Y . transpose reverse check [N lines] [N fields] / . . . (Line-Filtering operations) rmdup (Per-Line operations) base64 base64 debase64 base64 base64 md5/sha1/sha224/sha256/sha384/sha512 md5/sha1/sha224/sha256/sha384/sha512 bin[:BUCKET-SIZE] BUCKET-SIZE (: 100). strbin[:BUCKET-SIZE] BUCKET- SIZE (: 10). round/floor/ceil/trunc/frac . round ( ) floor ( ) ceil ( ) trunc ( ) frac ( ). dirname/basename ( dirname(1) basename(1)). extname ( '.'). barename . getnum[:TYPE] . TYPE n/i/d/p/h/o ( ). cut/echo ( cut(1)). echo cut . (Numeric Grouping operations) sum min max absmin absmax range ( - ) / (Textual/Numeric Grouping operations) count first last rand unique/uniq uniq unique . collapse countunique / (Statistical Grouping operations) p/s : (population) (sample). (sample) GNU R ( sstdev datamash sd() R ). mean geomean harmmean () trimmean[:PERCENT] . PERCENT 0 0.5 . (trimmean:0 mean . trimmean:0.5 median ). ms rms median q1 q3 iqr perc[:PERCENTILE] PERCENTILE (: 95). mode ( ) antimode ( ) pstdev/sstdev / pvar/svar / mad 1.4826 madraw pskew/sskew x 'sskew' 'pskew': x > 0 - positively skewed / skewed right 0 > x - negatively skewed / skewed left x > 1 - highly skewed right 1 > x > 0.5 - moderately skewed right 0.5 > x > -0.5 - approximately symmetric -0.5 > x > -1 - moderately skewed left -1 > x - highly skewed left pkurt/skurt (excess Kurtosis) jarque/dpo p-value - (jarque) - (dpo): p-Value p-Value . pcov/scov [X:Y] X Y ppearson/spearson [X:Y] [Pearson's R] X Y dotprod [X:Y] ( ) X Y (EXAMPLES) (Basic usage) : $ seq 10 | datamash sum 1 mean 1 55 5.5 ( ) : $ cat example.txt A 10 A 5 B 9 B 11 $ datamash -g 1 sum 2 < example.txt A 15 B 20 $ datamash groupby 1 sum 2 < example.txt A 15 B 20 ( '-s'): $ cat example.txt A 10 C 4 B 9 C 1 A 5 B 11 $ datamash -s -g1 sum 2 < example.txt A 15 B 20 C 5 : $ cat example.txt | sort -k1,1 | datamash -g 1 sum 2 (Header lines) -H (--headers) : # ... $ head -n5 scores_h.txt Name Major Score Shawn Engineering 47 Caleb Business 87 Christian Business 88 Derek Arts 60 # $ datamash --sort --headers --group 2 mean 3 pstdev 3 < scores_h.txt ( ) $ datamash -sH -g2 mean 3 pstdev 3 < scores_h.txt ( ) $ datamash -sH -g Major mean Score pstdev Score < scores_h.txt GroupBy(Major) mean(Score) pstdev(Score) Arts 68.9 10.1 Business 87.3 4.9 Engineering 66.5 19.1 Health-Medicine 90.6 8.8 Life-Sciences 55.3 19.7 Social-Sciences 60.2 16.6 ( / ) . . "FOO-BAR" : $ datamash -H sum FOO\\-BAR < input.txt $ datamash -H sum 'FOO\-BAR' < input.txt $ datamash -H sum "FOO\\-BAR" < input.txt (Skipping comment lines) '#' ';' ( ) -C (--skip-comments) : $ cat in.txt #foo 3 bar 5 ;baz 7 $ datamash sum 2 < in.txt 15 $ datamash -C sum 2 < in.txt 5 (Multiple fields) . : $ seq 9 | paste - - - 1 2 3 4 5 6 7 8 9 $ seq 9 | paste - - - | datamash sum 1 sum 2 sum 3 12 15 18 $ seq 9 | paste - - - | datamash sum 1,2,3 12 15 18 $ seq 9 | paste - - - | datamash sum 1-3 12 15 18 (Rounding) : $ ( echo X ; seq -1.25 0.25 1.25 ) \ | datamash --full -H round 1 ceil 1 floor 1 trunc 1 frac 1 X round(X) ceil(X) floor(X) trunc(X) frac(X) -1.25 -1 -1 -2 -1 -0.25 -1.00 -1 -1 -1 -1 0 -0.75 -1 0 -1 0 -0.75 -0.50 -1 0 -1 0 -0.5 -0.25 0 0 -1 0 -0.25 0.00 0 0 0 0 0 0.25 0 1 0 0 0.25 0.50 1 1 0 0 0.5 0.75 1 1 0 0 0.75 1.00 1 1 1 1 0 1.25 1 2 1 1 0.25 (Reversing fields) $ seq 6 | paste - - | datamash reverse 2 1 4 3 6 5 (Transposing a file) $ seq 6 | paste - - | datamash transpose 1 3 5 2 4 6 (Removing Duplicated lines) ( first last rmdup -s ): # : $ cat INPUT SampleID File 2 cc.txt 3 dd.txt 1 ab.txt 2 ee.txt 3 ff.txt # ( ): $ datamash rmdup 1 < INPUT # : $ datamash -H rmdup SampleID < INPUT SampleID File 2 cc.txt 3 dd.txt 1 ab.txt (Checksums) sha1 (TXT) sha1 : $ sha1sum *.txt | datamash -Wf sha1 2 (Check file structure) : / : $ seq 10 | paste - - | datamash check && echo ok || echo fail 5 lines, 2 fields ok $ seq 13 | paste - - - | datamash check && echo ok || echo fail line 4 (3 fields): 10 11 12 line 5 (2 fields): 13 datamash: check failed: line 5 has 2 fields (previous line had 3) fail $ seq 10 | paste - - | datamash check 2 fields 5 lines 5 lines, 2 fields $ seq 10 | paste - - | datamash check 4 fields line 1 (2 fields): 1 2 datamash: check failed: line 1 has 2 fields (expecting 4) $ seq 10 | paste - - | datamash check 7 lines datamash: check failed: input had 5 lines (expecting 7) (Cross-Tabulation) . : $ cat input.txt a x 3 a y 7 b x 21 a x 40 (a/b) (x/y) - (: ): $ datamash -s crosstab 1,2 < input.txt x y a 2 1 b 1 N/A : $ datamash -s crosstab 1,2 sum 3 < input.txt x y a 43 7 b 21 N/A $ datamash -s crosstab 1,2 unique 3 < input.txt x y a 3,40 7 b 21 N/A (Binning numeric values) : $ ( echo X ; seq -10 2.5 10 ) \ | datamash -H --full bin:5 1 X bin(X) -10.0 -10 -7.5 -10 -5.0 -5 -2.5 -5 0.0 0 2.5 0 5.0 5 7.5 5 10.0 10 (Binning string values) . N : $ cat input.txt PatientA 10 PatientB 11 PatientC 12 PatientA 14 PatientC 15 : $ datamash --full strbin 1 < input.txt PatientA 10 5 PatientB 11 6 PatientC 12 7 PatientA 14 5 PatientC 15 7 awk : $ cat input.txt \ | datamash --full strbin 1 \ | awk '{print > $NF ".txt"}' getnum (Extracting numbers with getnum) 'getnum' : $ echo zoom-123.45xyz | datamash getnum 1 123.45 getnum TYPE : getnum:n - ( ) getnum:i - getnum:d - getnum:p - ( ) getnum:h - () getnum:o - () : $ echo zoom-123.45xyz | datamash getnum 1 123.45 $ echo zoom-123.45xyz | datamash getnum:n 1 123 $ echo zoom-123.45xyz | datamash getnum:i 1 -123 $ echo zoom-123.45xyz | datamash getnum:d 1 123.45 $ echo zoom-123.45xyz | datamash getnum:p 1 -123.45 # Hex 0x123 = 291 Decimal $ echo zoom-123.45xyz | datamash getnum:h 1 291 # Octal 0123 = 83 Decimal $ echo zoom-123.45xyz | datamash getnum:o 1 83 (ADDITIONAL INFORMATION) : (https://www.gnu.org/software/datamash) (ENVIRONMENT) LC_NUMERIC (AUTHORS) Assaf Gordon Tim Rice Shawn Wagner Erik Auerswald. (COPYRIGHT) (C) 2025 Assaf Gordon and Tim Rice GPLv3+: GPL . : . . (SEE ALSO) datamash Texinfo . info datamash info datamash . datamash 1.9 April 2025 DATAMASH(1)