DATAMASH(1) User Commands DATAMASH(1)

datamash - انجام محاسبات آماری و تبدیل‌های متنی پایه‌ای روی فایل‌های متنی

datamash [OPTION] op [fld] [op fld ...]

عملیات عددی/رشته‌ای را روی ورودی دریافتی از 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

نادیده گرفتن خطوط توضیح (خطوطی که با '#' یا ';' و احیاناً فاصله‌های خالی اختیاری شروع می‌شوند)
چاپ تمام خط ورودی قبل از نتایج عملیات (پیش‌فرض: فقط کلیدهای گروه‌بندی‌شده چاپ می‌شوند)
این گزینه فقط برای عملیات خط‌به‌خط منطقی است. سایر کاربردها منسوخ شده‌اند و در نسخه‌های آینده GNU Datamash حذف خواهند شد.
گروه‌بندی از طریق فیلدهای X,[Y,Z]؛ معادل با عملیات اصلی 'groupby'
اولین خط ورودی، سرایند ستون‌ها است
چاپ سرایند ستون‌ها به عنوان خط اول
همانند ترکیب '--header-in --header-out'
خواندن و نوشتن داده‌ها در قالب vnlog. این گزینه به صورت ضمنی گزینه‌های -C -H -W را فعال می‌کند
نادیده گرفتن بزرگی و کوچکی حروف هنگام مقایسه متن؛ این گزینه بر گروه‌بندی و عملیات رشته‌ای تأثیر می‌گذارد
مرتب‌سازی ورودی پیش از گروه‌بندی؛ این گزینه نیاز به ارسال دستی ورودی با پایپ به 'sort' را برطرف می‌کند
تنظیم مقدار بذر (seed) برای عملیاتی که از تصادفی‌سازی استفاده می‌کنند
استفاده از X برای جداسازی عناصر در فهرست‌های collapse و unique (پیش‌فرض: کاما)

اجازه دادن به خطوطی با تعداد فیلدهای متغیر
پر کردن مقادیر مفقود با X (پیش‌فرض: N/A)

استفاده از X به جای TAB به عنوان جداکننده فیلدها
چاپ مقادیر عددی با قالب نقطه شناور مشابه printf.
استفاده از X به عنوان جداکننده فیلدهای خروجی (پیش‌فرض: استفاده از همان جداکننده -t/-W)
نادیده گرفتن مقادیر NA/NaN
گرد کردن خروجی عددی تا N رقم اعشار
استفاده از فضای خالی (یک یا چند فاصله و/یا تب) به عنوان جداکننده فیلدها
پایان دادن به خطوط با بایت 0، نه با خط جدید
دستور sort(1) جایگزین برای استفاده.
نمایش این راهنما و خروج
نمایش اطلاعات نسخه و خروج

عملیات اصلی بر شیوه پردازش فایل تأثیر می‌گذارند. در صورت استفاده، عملیات اصلی باید ابتدا در فهرست آورده شود. اگر عملیات اصلی مشخص نشده باشد، کل فایل پردازش می‌شود - یا خط‌به‌خط (برای عملیات 'روی هر خط') یا همه خطوط به عنوان یک گروه واحد (برای عملیات گروه‌بندی). بخش مثال‌ها را در زیر ببینید.

گروه‌بندی فایل بر اساس فیلدهای داده‌شده. معادل گزینه '-g'. برای هر گروه، عملیات op را روی فیلد fld انجام می‌دهد.
محاسبه جدول متقاطع فایل بر اساس دو فیلد (جدول متقاطع با نام جدول محوری یا pivot table نیز شناخته می‌شود). اگر عملیاتی مشخص نشود، تعداد وقوع جفت‌های X,Y را شمارش می‌کند.
ترانهادن سطرها و ستون‌های فایل ورودی
معکوس کردن ترتیب فیلدها در هر خط
بررسی اینکه تمام خطوط فایل ورودی دارای تعداد فیلدهای یکسانی باشند، یا تعداد خطوط/فیلدها با مقادیر مورد انتظار مطابقت داشته باشد. تعداد خطوط و فیلدها در خروجی استاندارد چاپ می‌شوند. در صورت عدم تطابق تعداد خطوط یا فیلدها، با کد غیرصفر خارج شده و خط ناسازگار را چاپ می‌کند.

حذف خطوط دارای مقدار کلید تکراری

کدگذاری فیلد به صورت base64
رمزگشایی فیلد از base64، با خروج همراه با خطا در صورت نامعتبر بودن رشته base64
محاسبه هش md5/sha1/sha224/sha256/sha384/sha512 مقدار فیلد
دسته‌بندی مقادیر عددی در سطل‌هایی با اندازه BUCKET-SIZE (پیش‌فرض: 100).
هش کردن ورودی و بازگرداندن یک مقدار عددی صحیح بین صفر و BUCKET-SIZE (پیش‌فرض: 10).
عملیات گرد کردن عددی. round (گرد کردن به سمت دور از صفر در نیمه‌ها)، floor (گرد کردن به پایین)، ceil (گرد کردن به بالا)، trunc (برش، گرد کردن به سمت صفر)، frac (بخش کسر، بازگرداندن بخش اعشاری یک مقدار ممیز شناور).
استخراج نام دایرکتوری و نام پایه فایل از یک رشته داده‌شده (مشابه با dirname(1) و basename(1)).
استخراج پسوند نام فایل (بدون '.').
استخراج نام پایه فایل بدون پسوند.
استخراج یک عدد از فیلد. TYPE یک گزینه تک‌حرفی اختیاری n/i/d/p/h/o است (مثال‌های زیر را ببینید).
کپی کردن فیلد ورودی به فیلد خروجی (مشابه با cut(1)). دستور echo صرفاً یک نام مستعار برای cut است.

مجموع مقادیر
کمینه مقدار
بیشینه مقدار
کمینه قدر مطلق مقادیر
بیشینه قدر مطلق مقادیر
دامنه مقادیر (بیشینه - کمینه)

شمارش تعداد عناصر موجود در گروه
اولین مقدار در گروه
آخرین مقدار در گروه
یک مقدار تصادفی از گروه
فهرست مرتب‌شده مقادیر یکتا و جداشده با کاما دستور uniq صرفاً یک نام مستعار برای unique است.
فهرست تمام مقادیر ورودی جداشده با کاما
تعداد مقادیر یکتا/متمایز

پیشوند p/s نشان‌دهنده نوع متغیر است: جامعه (population) یا نمونه (sample). به طور معمول، نوع نمونه (sample) با توابع داخلی GNU R معادل است (برای نمونه، عملیات sstdev در datamash معادل تابع sd() در R است).

میانگین مقادیر
میانگین هندسی مقادیر
میانگین همساز (هارمونیک) مقادیر
میانگین پیراسته مقادیر. مقدار PERCENT باید بین 0 و 0.5 باشد. (trimmean:0 معادل با mean است. trimmean:0.5 معادل با median است).
میانگین مربعات مقادیر
ریشه میانگین مربعات مقادیر
مقدار میانه
مقدار چارک اول
مقدار چارک سوم
دامنه بین چارکی
مقدار صدک PERCENTILE (پیش‌فرض: 95).
مقدار نما (بسامدترین مقدار)
مقدار پادنما (کم‌تکرارترین مقدار)
انحراف معیار جامعه/نمونه
واریانس جامعه/نمونه
انحراف مطلق میانه، مقیاس‌بندی‌شده با ضریب ثابت 1.4826 برای توزیع‌های نرمال
انحراف مطلق میانه، مقیاس‌بندی‌نشده
چولگی گروه
مقادیر 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
کشیدگی اضافی (excess Kurtosis) گروه
مقدار p-value در آزمون‌های نرمال بودن ژارک-برا (jarque) و دی‌آگوستینو-پیرسون (dpo):
فرض صفر، نرمال بودن است؛
مقادیر پایین p-Value نشان‌دهنده داده‌های غیرنرمال است؛
مقادیر بالای p-Value نشان می‌دهد فرض صفر را نمی‌توان رد کرد.
کوواریانس فیلدهای X و Y
ضریب همبستگی گشتاوری پیرسون [Pearson's R] بین فیلدهای X و Y
ضرب عددی اسکالر (همچنین موسوم به ضرب نقطه‌ای یا ضرب داخلی اقلیدسی) بین فیلدهای X و Y

چاپ مجموع و میانگین مقادیر فیلد ۱:

$ 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

اگر فایل ورودی دارای خط سرایند است، از -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

برای نادیده گرفتن خطوطی که با نویسه‌های '#' یا ';' آغاز می‌شوند (همراه با فاصله‌های خالی اختیاری پیش از آن‌ها)، از -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

برای مشخص کردن چندین فیلد از کاما یا خط تیره استفاده کنید. دستورات زیر معادل یکدیگرند:

$ 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

مثال‌های زیر عملیات مختلف گرد کردن را نشان می‌دهند:

$ ( 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

$ seq 6 | paste - - | datamash reverse
2    1
4    3
6    5

$ seq 6 | paste - - | datamash transpose
1    3    5
2    4    6

حذف خطوطی با مقدار کلید تکراری از فیلد ۱ (برخلاف عملیات 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

محاسبه مقدار هش sha1 هر فایل متنی (TXT)، پس از محاسبه مقدار sha1 محتوای هر فایل:

$ sha1sum *.txt | datamash -Wf sha1 2

بررسی ساختار فایل ورودی: اطمینان از اینکه همه خطوط دارای تعداد فیلدهای یکسان، یا تعداد خطوط/فیلدهای مورد انتظار باشند:

$ 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)

جدول متقاطع رابطه میان دو فیلد را مقایسه می‌کند. با فرض فایل ورودی زیر:

$ 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

دسته‌بندی مقادیر ورودی در سطل‌هایی با اندازه ۵:

$  ( 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

هش کردن هر مقدار ورودی به یک عدد صحیح. یک کاربرد متداول، تقسیم یک فایل ورودی به 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' یک مقدار عددی را از فیلد استخراج می‌کند:

$ 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

ببینید: وب‌سایت گنو دیتامش (https://www.gnu.org/software/datamash)

نویسه ممیز اعشار و جداکننده هزارگان

نوشته‌شده توسط Assaf Gordon، Tim Rice، Shawn Wagner و Erik Auerswald.

کپی‌رایت © 2025 Assaf Gordon and Tim Rice مجوز GPLv3+: گنو GPL نسخه ۳ یا بالاتر https://gnu.org/licenses/gpl.html.
این یک نرم‌افزار آزاد است: شما می‌توانید آن را تغییر داده یا مجدداً توزیع کنید. هیچ ضمانتی وجود ندارد، تا حدی که قانون اجازه می‌دهد.

مستندات کامل برای datamash به صورت یک کتابچه راهنمای Texinfo نگهداری می‌شود. اگر برنامه‌های info و datamash به درستی روی سیستم شما نصب شده باشند، دستور

info datamash

باید دسترسی شما به کل کتابچه راهنما را فراهم کند.

April 2025 datamash 1.9