| 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)
عملیات گروهبندی متنی/عددی (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)
کپیرایت
© 2025 Assaf Gordon and Tim Rice مجوز
GPLv3+: گنو GPL نسخه
۳ یا بالاتر
https://gnu.org/licenses/gpl.html.
این یک
نرمافزار
آزاد است:
شما
میتوانید
آن را تغییر
داده یا
مجدداً
توزیع کنید.
هیچ ضمانتی
وجود
ندارد، تا
حدی که
قانون
اجازه
میدهد.
همچنین ببینید (SEE ALSO)
مستندات کامل برای datamash به صورت یک کتابچه راهنمای Texinfo نگهداری میشود. اگر برنامههای info و datamash به درستی روی سیستم شما نصب شده باشند، دستور
- info datamash
باید دسترسی شما به کل کتابچه راهنما را فراهم کند.
| April 2025 | datamash 1.9 |