| GAWK(1) | دستورات کاربر | GAWK(1) |
نام (NAME)
gawk - زبان اسکن و پردازش الگوها
خلاصه دستور (SYNOPSIS)
gawk [
گزینههای
سبک POSIX یا GNU ] -f
فایل_برنامه
[ -- ] فایل ...
gawk [
گزینههای
سبک POSIX یا GNU ] [ -- ]
متن_برنامه
فایل ...
ابتدا بخوانید (README FIRST)
این صفحه راهنما صرفاً به عنوان یک لطف و تسهیل ارائه شده است. لطفاً توجه داشته باشید که مرجع اصلی و موثق (One Source Of Truth) برای gawk راهنمای Texinfo است که به صورت آنلاین در چندین قالب در نشانی زیر در دسترس است: https://www.gnu.org/software/gawk/manual. همچنین ممکن است در زیرسیستم Info بر روی سیستم شما نصب شده باشد و از طریق دستور info(1) در دسترس قرار گیرد.
در صورت وجود هرگونه تناقض میان راهنمای Texinfo و این صفحه راهنما، راهنمای Texinfo باید به عنوان مرجع معتبر و اصلی در نظر گرفته شود.
توجه داشته باشید که اسناد Info، صفحات وب HTML و نسخه PDF راهنما همگی دارای محتوای یکسانی هستند، چرا که همگی از یک فایل منبع یکسان Texinfo تولید شدهاند.
علاوه بر این، نگهدارنده gawk این حق را برای خود محفوظ میدارد که در آینده این صفحه راهنما را از بسته توزیع حذف کرده یا محتوای آن را به شدت خلاصه کند تا بار نگهداری آن سبکتر شود.
توضیحات (DESCRIPTION)
دستور Gawk پیادهسازی پروژه GNU از زبان برنامهنویسی AWK است. این ابزار با تعریف زبان در استاندارد POSIX 1003.1 مطابقت دارد. این نسخه به نوبه خود بر اساس توضیحات ارائهشده در کتاب The AWK Programming Language، نوشتهٔ آهو (Aho)، کرنیگان (Kernighan) و واینبرگر (Weinberger) است. Gawk ویژگیهای اضافی موجود در نسخه فعلی awk برایان کرنیگان و افزونههای متعدد مختص GNU را فراهم میکند.
خط فرمان شامل گزینههایی برای خود gawk، متن برنامه AWK (چنانچه از طریق گزینههای -f یا --include عرضه نشده باشد) و مقادیری است که باید در متغیرهای از پیش تعریفشده ARGC و ARGV در دسترس برنامه قرار گیرند.
پیشگفتار (PREFACE)
این صفحه راهنما عمداً تا حد ممکن خلاصه و فشرده تهیه شده است. جزئیات کامل در GAWK: Effective AWK Programming ارائه شده است و برای آگاهی از شرح کامل هر ویژگی خاص باید به آن مراجعه کنید. در صورت امکان، پیوندهایی به نسخه آنلاین راهنما ارائه شده است.
قالب گزینهها (OPTION FORMAT)
گزینههای Gawk میتوانند گزینههای تکحرفی سنتی به سبک POSIX، یا گزینههای بلند به سبک GNU باشند. گزینههای POSIX با یک “-” تکی آغاز میشوند، در حالی که گزینههای بلند با “--” شروع میشوند. گزینههای بلند هم برای ویژگیهای اختصاصی GNU و هم برای ویژگیهای الزامی POSIX ارائه شدهاند.
گزینههای خاص Gawk معمولاً در قالب گزینههای بلند به کار میروند. آرگومانهای گزینههای بلند یا با یک علامت = بدون فاصله به گزینه متصل میشوند، یا میتوانند در آرگومان بعدی خط فرمان ارائه گردند. گزینههای بلند تا زمانی که تداخلی نداشته و یکتا باشند، میتوانند به صورت مخفف نوشته شوند.
علاوه بر این، هر گزینه بلند دارای یک گزینه کوتاه متناظر است، تا بتوان از قابلیت آن گزینه در اسکریپتهای اجرایی مبتنی بر #! نیز استفاده کرد.
گزینهها (OPTIONS)
دستور Gawk گزینههای زیر را میپذیرد. گزینههای استاندارد در ابتدا فهرست شدهاند و به دنبال آنها گزینههای مربوط به افزونههای gawk، بر اساس حروف الفبای گزینه کوتاه مرتب شدهاند.
- -f program-file, --file program-file
- خواندن سورسکد برنامه AWK از فایل program-file، به جای اولین آرگومان خط فرمان. میتوان از چندین گزینه -f استفاده کرد. فایلهایی که با -f خوانده میشوند به گونهای پردازش میشوند که گویی با یک دستور ضمنی @namespace "awk" آغاز شدهاند.
- -F fs, --field-separator fs
- استفاده از fs برای جداکننده فیلدهای ورودی (مقدار متغیر پیشتعریفشده FS).
- -v var=val, --assign var=val
- انتساب مقدار val به متغیر var، پیش از شروع اجرای برنامه. چنین مقادیر متغیری برای قاعده BEGIN یک برنامه AWK در دسترس خواهند بود.
- -b, --characters-as-bytes
- پردازش تمام دادههای ورودی به عنوان نویسههای تکبایتی. گزینه --posix این گزینه را لغو و بیاثر میکند.
- -c, --traditional
- اجرا در حالت سازگاری (compatibility). در حالت سازگاری، gawk دقیقاً مشابه با awk برایان کرنیگان رفتار میکند؛ هیچیک از افزونههای اختصاصی GNU شناسایی نمیشوند.
- -C, --copyright
- چاپ نسخه کوتاه پیام اطلاعات حقنشر GNU در خروجی استاندارد و خروج موفقیتآمیز.
- -d[file], --dump-variables[=file]
- چاپ فهرستی مرتبشده از متغیرهای سراسری، نوع آنها و مقادیر نهاییشان در file. فایل پیشفرض awkvars.out در پوشه جاری است.
- -D[file], --debug[=file]
- فعالسازی
اشکالزدایی
(دیباگ)
برنامههای
AWK. به طور
پیشفرض،
اشکالزدا
دستورات را
به صورت
تعاملی از
صفحهکلید
(ورودی
استاندارد)
میخواند.
آرگومان
اختیاری file
پروندهای
شامل
فهرستی از
دستورات را
برای اجرای
غیرتعاملی
اشکالزدا
مشخص
میکند.
در این حالت اجرا، gawk سورسکد AWK را بارگذاری کرده و سپس منتظر دریافت دستورات اشکالزدایی میماند. Gawk تنها میتواند سورسکد برنامه AWK را که با گزینههای -f و --include ارائه شدهاند، اشکالزدایی کند. اشکالزدا در GAWK: Effective AWK Programming مستند شده است؛ پیوند زیر را ببینید: https://www.gnu.org/software/gawk/manual/html_node/Debugger.html#Debugger.
- -e program-text, --source program-text
- استفاده از program-text به عنوان کد منبع برنامه AWK. هر آرگومان ارائهشده از طریق -e به گونهای در نظر گرفته میشود که گویی با یک دستور ضمنی @namespace "awk" آغاز شده است.
- -E file, --exec file
- مشابه با -f، با این تفاوت که این گزینه آخرین گزینهای است که پردازش میشود. این گزینه باید در اسکریپتهای اجرایی #! (بهویژه برای برنامههای کاربردی CGI) استفاده شود تا از ارسال ناخواسته گزینهها یا سورسکد (!) از خط فرمان یا از طریق URL جلوگیری به عمل آید. این گزینه انتساب متغیرها از طریق خط فرمان را غیرفعال میسازد.
- -g, --gen-pot
- اسکن و تجزیه برنامه AWK و تولید یک فایل در قالب الگوی شیء قابل حمل GNU .pot (Portable Object Template) در خروجی استاندارد با مدخلهایی برای تمام رشتههای قابل بومیسازی در برنامه. خود برنامه اجرا نمیشود.
- -h, --help
- چاپ خلاصهای از گزینههای موجود در خروجی استاندارد. مطابق با استانداردهای کدنویسی گنو (GNU Coding Standards)، این گزینهها بلافاصله موجب خروج موفقیتآمیز میشوند.
- -i include-file, --include include-file
- بارگذاری یک کتابخانه منبع awk. این عمل با استفاده از متغیر محیطی AWKPATH به جستجوی کتابخانه میپردازد. چنانچه جستجوی اولیه ناموفق باشد، تلاش دیگری پس از افزودن پسوند .awk انجام میپذیرد. فایل مربوطه فقط یکبار بارگذاری میشود (یعنی موارد تکراری حذف میشوند) و کد آن بخش اصلی سورس برنامه را تشکیل نمیدهد. فایلهای خواندهشده با --include به گونهای پردازش میشوند که گویی با یک دستور ضمنی @namespace "awk" آغاز شدهاند.
- -I, --trace
- چاپ نام بایتکدهای داخلی همزمان با اجرای برنامه. ردیابی در خروجی خطای استاندارد چاپ میشود. هر “کد عملیاتی (op code)” با یک علامت + در خروجی مشخص میگردد.
- -k, --csv
- فعالسازی پردازش ویژه پروندههای CSV (مقادیر جداشده با کاما). برای جزئیات بیشتر به بخش مقادیر جداشده با کاما در ادامه مراجعه فرمایید.
- -l lib, --load lib
- بارگذاری یک افزونه gawk از کتابخانه مشترک lib. این عمل با استفاده از متغیر محیطی AWKLIBPATH کتابخانه را جستجو میکند. اگر جستجوی اولیه ناموفق باشد، تلاش دیگری پس از افزودن پسوند پیشفرض کتابخانه مشترک سیستم انجام میشود. انتظار میرود تابع مقداردهی اولیه کتابخانه با نام dl_load() تعریف شده باشد.
- -L [value], --lint[=value]
- ارائه هشدارهایی درباره ساختارهایی که مشکوک هستند یا قابلیت انتقال به سایر پیادهسازیهای AWK را ندارند. پیوند زیر را برای مشاهده فهرست مقادیر ممکن برای value ببینید: https://www.gnu.org/software/gawk/manual/html_node/Options.html#Options.
- -M, --bignum
- اجبار به
استفاده از
محاسبات
ریاضی با
دقت دلخواه
بر روی
اعداد. این
گزینه در
صورتی که gawk
برای
استفاده از
کتابخانههای
GNU MPFR و GMP
کامپایل
نشده باشد،
بیاثر
خواهد بود
(در چنین
حالتی، gawk
یک پیام
هشدار صادر
میکند).
نکته: این ویژگی در وضعیت آزمایشی و مشروط قرار دارد. نگهدارنده اصلی gawk دیگر از آن پشتیبانی نمیکند، اگرچه عضوی از تیم توسعه از آن پشتیبانی میکند. چنانچه این شرایط تغییر یابد، این ویژگی از gawk حذف خواهد شد.
- -n, --non-decimal-data
- تشخیص مقادیر هشتهشتی (اکتال) و شانزدهشانزدهی (هگزادسیمال) در دادههای ورودی. از این گزینه با احتیاط بسیار زیاد استفاده کنید!
- -N, --use-lc-numeric
- اجبار gawk به استفاده از نویسه ممیز اعشاری لوکال سیستم هنگام تجزیه دادههای ورودی.
- -o[file], --pretty-print[=file]
- تولید یک نسخه مرتب و با قالببندی زیبا از برنامه در file. فایل پیشفرض awkprof.out در پوشه جاری است. این گزینه متضمن گزینه --no-optimize است.
- -O, --optimize
- فعالسازی بهینهسازیهای پیشفرض gawk بر روی نمایش درونی برنامه. این گزینه به صورت پیشفرض فعال است.
- -p[prof-file], --profile[=prof-file]
- شروع یک نشست ارزیابی و تحلیل کارایی (profiling)، و ارسال دادههای پروفایل به prof-file. پیشفرض awkprof.out در پوشه جاری است. پروفایل شامل تعداد دفعات اجرای هر دستور در برنامه در حاشیه سمت چپ و تعداد فراخوانیها برای هر تابع تعریفشده توسط کاربر است. Gawk در این حالت با سرعت کمتری اجرا میشود. این گزینه متضمن گزینه --no-optimize است.
- -P, --posix
- این گزینه حالت سازگاری را فعال کرده و شماری از افزونههای معمول را غیرفعال میسازد.
- -r, --re-interval
- فعالسازی استفاده از عبارتهای بازهای (interval expressions) در تطبیق عبارتهای باقاعده. عبارتهای بازهای به طور پیشفرض فعال هستند، اما این گزینه برای سازگاری با گذشته باقی مانده است.
- -s, --no-optimize
- غیرفعالسازی بهینهسازیهای پیشفرض gawk بر روی نمایش داخلی برنامه.
- -S, --sandbox
- اجرای gawk در حالت قرنطینه (سندباکس)، که تابع system()، تغییر مسیر ورودی با getline، تغییر مسیر خروجی با print و printf و بارگذاری افزونههای پویا را غیرفعال میسازد. اجرای دستورات (از طریق خطوط لوله) نیز غیرفعال میشود.
- -t, --lint-old
- ارائه هشدارهایی درباره ساختارهایی که به نسخه اولیه awk در UNIX قابل انتقال نیستند.
- -V, --version
- چاپ اطلاعات نسخه این کپی خاص از gawk در خروجی استاندارد. این گزینه هنگام گزارش باگها بسیار مفید است. مطابق با استانداردهای کدنویسی گنو، این گزینهها موجب خروج فوری و موفقیتآمیز میشوند.
- --
- پایان گزینهها را اعلام میکند. این مورد برای اجازه دادن به آرگومانهای بعدی برنامه AWK که ممکن است با علامت “-” آغاز شوند، کاربرد دارد.
در حالت سازگاری، هر گزینه دیگری به عنوان نامعتبر نشانهگذاری شده اما نادیده گرفته میشود. در عملکرد عادی، تا زمانی که متن برنامه ارائه شده باشد، گزینههای ناشناخته در آرایه ARGV جهت پردازش به برنامه AWK تحویل داده میشوند.
برای سازگاری با استاندارد POSIX، میتوان از گزینه -W به همراه نام یک گزینه بلند استفاده کرد.
اجرای برنامه AWK (AWK PROGRAM EXECUTION)
یک برنامه AWK شامل دنبالهای از دستورالعملهای اختیاری، گزارههای الگو-کنش، و تعاریف اختیاری توابع است:
@include "filename"
@nsinclude "filename"
@load "filename"
@namespace "name"
pattern { action statements }
function name(parameter list) {
statements }
دستور Gawk ابتدا کد منبع برنامه را از program-file(ها) در صورت تعیین، از آرگومانهای ارائهشده به --source، یا از نخستین آرگومان غیرگزینهای در خط فرمان میخواند. گزینههای -f و --source میتوانند چندینبار در خط فرمان به کار روند. Gawk متن برنامه را به گونهای میخواند که گویی تمام فایلهای program-file و متنهای کد منبع خط فرمان به یکدیگر متصل و الحاق شدهاند.
علاوه بر این، خطوطی که با @include آغاز میشوند میتوانند برای گنجاندن سایر فایلهای کد منبع در برنامه شما به کار روند. این معادل استفاده از گزینه --include است.
خطوطی که با @nsinclude آغاز میشوند نیز فایلها را میگنجانند، اما با دو تفاوت: نخست، فضای نام در فایل گنجاندهشده به مقدار پیشفرض awk بازنشانی نمیشود و دوم، چنین فایلهایی میتوانند چندینبار در برنامه گنجانده شوند.
خطوطی که با @load آغاز میشوند میتوانند برای بارگذاری توابع افزونه در برنامه شما استفاده شوند. این عمل معادل استفاده از گزینه --load است.
متغیر محیطی AWKPATH مسیر جستجویی را برای یافتن فایلهای کد منبع نامبردهشده با گزینههای -f و --include مشخص میسازد. چنانچه این متغیر وجود نداشته باشد، مسیر پیشفرض ".:/usr/local/share/awk" خواهد بود. (دایرکتوری واقعی ممکن است بسته به نحوه کامپایل و نصب gawk متفاوت باشد.) اگر نام فایل دادهشده به گزینه -f حاوی نویسه “/” باشد، هیچ جستجوی مسیری انجام نخواهد شد.
متغیر محیطی AWKLIBPATH مسیر جستجویی را برای یافتن فایلهای نامبردهشده با گزینه --load تعیین میکند. اگر این متغیر وجود نداشته باشد، مسیر پیشفرض "/usr/local/lib/gawk" است. (دایرکتوری واقعی ممکن است بسته به چگونگی ساخت و نصب gawk متفاوت باشد.)
دستور Gawk برنامههای AWK را به ترتیب زیر به اجرا درمیآورد: نخست، تمام انتسابهای متغیر مشخصشده از طریق گزینه -v انجام میشوند. سپس، gawk برنامه را به یک قالب داخلی کامپایل میکند. پس از آن، gawk کد موجود در قواعد BEGIN (در صورت وجود) را اجرا کرده و سپس اقدام به خواندن تکتک فایلهای نامبرده در آرایه ARGV (تا ARGV[ARGC-1]) مینماید. اگر هیچ فایلی در خط فرمان مشخص نشده باشد، gawk ورودی استاندارد را میخواند.
اگر نام یک فایل در خط فرمان به فرم var=val باشد، به عنوان یک انتساب متغیر تلقی میشود. به متغیر var مقدار val منتسب خواهد شد (این امر پس از اجرای قواعد BEGIN صورت میپذیرد).
اگر مقدار یک عنصر خاص از ARGV خالی باشد ("")، gawk از روی آن میگذرد و آن را نادیده میگیرد.
برای هر فایل ورودی، چنانچه یک قاعده BEGINFILE وجود داشته باشد، gawk کد مربوط به آن را پیش از پردازش محتویات فایل اجرا میکند. مشابهاً، gawk کد مربوط به قواعد ENDFILE را پس از پردازش فایل به اجرا درمیآورد.
برای هر رکورد در ورودی، gawk بررسی میکند که آیا با هر یک از الگوهای برنامه AWK مطابقت دارد یا خیر. به ازای هر الگویی که رکورد با آن تطابق یابد، gawk کنش مرتبط با آن را اجرا میکند. الگوها به ترتیبی که در برنامه آورده شدهاند بررسی میشوند.
در پایان، پس از به اتمام رسیدن تمام ورودیها، gawk کد موجود در قواعد END (در صورت وجود) را اجرا مینماید.
دایرکتوریهای خط فرمان (Command Line Directories)
بر اساس استاندارد POSIX، فایلهای نامبردهشده در خط فرمان awk باید فایلهای متنی باشند. چنانچه متنی نباشند، رفتار “تعریفنشده” خواهد بود. اغلب نسخههای awk وجود یک پوشه در خط فرمان را خطایی مهلک (fatal error) قلمداد میکنند.
برای gawk، یک پوشه در خط فرمان پیام هشدار تولید میکند، اما از روی آن رد میشود. چنانچه هر یک از گزینههای --posix یا --traditional داده شده باشند، gawk به رفتار تلقی پوشهها در خط فرمان به عنوان خطای مهلک بازمیگردد.
متغیرها و آرایهها (VARIABLES AND ARRAYS)
متغیرهای AWK پویا هستند؛ آنها در نخستین کاربردشان پدید میآیند. مقادیر آنها بسته به نحوه بهکارگیریشان اعداد ممیز شناور، رشتهها، یا هر دو هستند. علاوه بر این، gawk به متغیرها اجازه میدهد که از نوع عبارت باقاعده باشند. همچنین AWK دارای آرایههای یکبعدی است؛ آرایههای چندبعدی را میتوان شبیهسازی کرد. با این وجود، gawk آرایههای چندبعدی واقعی (آرایهای از آرایهها) را فراهم میآورد. چندین متغیر از پیشتعریفشده با اجرای برنامه تنظیم میشوند؛ این متغیرها در صورت لزوم شرح داده شده و در ادامه خلاصه شدهاند.
رکوردها (Records)
به طور معمول، رکوردها با نویسه خط جدید از یکدیگر جدا میشوند. شما میتوانید با انتساب مقادیر به متغیر داخلی RS، چگونگی تفکیک رکوردها را کنترل کنید. برای جزئیات به نشانی زیر مراجعه فرمایید: https://www.gnu.org/software/gawk/manual/html_node/Records.html.
فیلدها (Fields)
همزمان با خواندن هر رکورد ورودی، gawk رکورد را با استفاده از مقدار متغیر FS به عنوان جداکننده فیلد، به فیلدها تقسیم میکند. علاوه بر این، متغیرهای FIELDWIDTHS و FPAT میتوانند برای کنترل نحوه تفکیک فیلدهای ورودی به کار گرفته شوند. جزئیات مربوطه را در نشانی زیر مشاهده نمایید: https://www.gnu.org/software/gawk/manual/html_node/Fields.html.
به هر فیلد در رکورد ورودی میتوان با موقعیت آن ارجاع داد: $1، $2 و الی آخر. $0 بیانگر کل رکورد است، شامل فاصلههای ابتدایی و انتهایی.
متغیر NF بر روی تعداد کل فیلدهای رکورد ورودی تنظیم میشود.
ارجاع به فیلدهای ناموجود (یعنی فیلدهای بعد از $NF) رشته تهی تولید میکند. با این حال، انتساب مقدار به یک فیلد ناموجود (مانند $(NF+2) = 5) مقدار NF را افزایش داده، فیلدهای میانی را با مقدار رشته تهی ایجاد نموده و موجب میشود مقدار $0 مجدداً محاسبه گردد، به طوری که فیلدها با مقدار OFS از هم جدا شوند. ارجاع به فیلدهایی با شماره منفی موجب خطای مهلک میشود. کاهش دادن مقدار NF باعث از دست رفتن مقادیر فیلدهای فراتر از مقدار جدید شده و مقدار $0 را از نو محاسبه میکند، که در آن فیلدها با مقدار OFS تفکیک میگردند.
انتساب مقدار به یک فیلد موجود سبب بازسازی کل رکورد هنگام ارجاع به $0 میگردد. مشابهاً، انتساب مقدار به $0 باعث تفکیک مجدد رکورد شده و مقادیر جدیدی برای فیلدها پدید میآورد.
مقادیر جداشده با کاما (Comma Separated Values)
هنگامی که با گزینههای -k یا --csv فراخوانی شود، gawk از تعیین معمول رکوردها و تفکیک فیلدها همانگونه که در بالا تشریح شد استفاده نمیکند. در عوض، رکوردها با نویسه خط جدید که داخل گیومه نباشد خاتمه مییابند و فیلدها با کاما از هم جدا میشوند. میتوان از گیومه دوتایی برای محصور کردن فیلدهای حاوی کاما، خط جدید یا گیومه دوتایی تکرارشده استفاده کرد. پیوند زیر را برای جزئیات بیشتر ملاحظه فرمایید: https://www.gnu.org/software/gawk/manual/html_node/Comma-Separated-Fields.html.
متغیرهای داخلی (Built-in Variables)
متغیرهای داخلی Gawk در ادامه آمدهاند. این فهرست عمداً فشرده و خلاصه است. برای جزئیات بیشتر به پیوند زیر رجوع کنید: https://www.gnu.org/software/gawk/manual/html_node/Built_002din-Variables.
- ARGC
- تعداد آرگومانهای خط فرمان.
- ARGIND
- شاخص پرونده جاری در حال پردازش در آرایه ARGV.
- ARGV
- آرایهای از آرگومانهای خط فرمان. این آرایه از 0 تا ARGC - 1 نمایهگذاری میشود.
- BINMODE
- در سیستمهای غیر-POSIX، استفاده از حالت دودویی (binary) را برای تمام ورودی/خروجیهای فایل تعیین میکند. نشانی زیر را برای جزئیات ببینید: https://www.gnu.org/software/gawk/manual/html_node/PC-Using.html.
- CONVFMT
- قالب تبدیل برای اعداد؛ به طور پیشفرض "%.6g" است.
- ENVIRON
- آرایهای حاوی مقادیر محیط فعلی سیستم. این آرایه با متغیرهای محیطی نمایهگذاری میشود و هر عنصر، مقدار آن متغیر است.
- ERRNO
- اگر خطایی در سطح سیستم هنگام تغییر مسیر برای getline، هنگام خواندن در getline، یا در طی فراخوانی close() رخ دهد، ERRNO بر روی رشتهای در تشریح خطا تنظیم میشود. این مقدار در لوکالهای غیرانگلیسی قابل ترجمه است.
- FIELDWIDTHS
- فهرستی از عرض فیلدها که با فاصله از هم جدا شدهاند. در صورت تنظیم، gawk ورودی را به فیلدهایی با عرض ثابت تفکیک میکند، به جای این که از مقدار متغیر FS به عنوان جداکننده فیلد استفاده نماید. هر عرض فیلد میتواند به صورت اختیاری با یک مقدار جداشده با دونقطه برای مشخص کردن تعداد نویسههایی که باید قبل از شروع فیلد نادیده گرفته شوند همراه باشد.
- FILENAME
- نام فایل ورودی جاری. اگر هیچ فایلی در خط فرمان تعیین نشده باشد، مقدار FILENAME برابر با “-” خواهد بود. با این حال، FILENAME درون قاعده BEGIN تعریفنشده است (مگر این که توسط getline تنظیم شده باشد).
- FNR
- شماره رکورد ورودی در فایل ورودی جاری.
- FPAT
- یک عبارت باقاعده که محتوای فیلدها در یک رکورد را مشخص میکند. در صورت تنظیم، gawk ورودی را به فیلدهایی تفکیک میکند که با آن عبارت باقاعده تطابق دارند، به جای این که از مقدار FS به عنوان جداکننده فیلد استفاده کند.
- FS
- جداکننده فیلدهای ورودی، که به صورت پیشفرض یک فاصله است. برای جزئیات پیوند زیر را ببینید: https://www.gnu.org/software/gawk/manual/html_node/Field-Separators.html.
- FUNCTAB
- آرایهای که شناسهها و مقادیر متناظر آن نام تمامی توابع تعریفشده توسط کاربر یا توابع افزونه موجود در برنامه است. نکته: نمیتوان از دستور delete همراه با آرایه FUNCTAB استفاده کرد.
- IGNORECASE
- حساسیت به بزرگی و کوچکی حروف را در تمامی عملیاتهای عبارت باقاعده و رشتهها کنترل میکند. برای جزئیات به پیوند زیر رجوع کنید: https://www.gnu.org/software/gawk/manual/html_node/Case_002dsensitivity.html.
- LINT
- کنترل پویای گزینه --lint را از درون برنامه AWK فراهم میسازد.
- NF
- تعداد فیلدهای رکورد ورودی جاری.
- NR
- تعداد کل رکوردهای ورودی که تاکنون مشاهده شدهاند.
- OFMT
- قالب خروجی برای اعداد، که به صورت پیشفرض "%.6g" است.
- OFS
- جداکننده فیلدهای خروجی، که به طور پیشفرض یک فاصله است.
- ORS
- جداکننده رکوردهای خروجی، که به صورت پیشفرض یک خط جدید است.
- PREC
- دقت کاری اعداد ممیز شناور با دقت دلخواه، که به طور پیشفرض 53 است.
- PROCINFO
- عناصر این آرایه دسترسی به اطلاعات مربوط به برنامه AWK در حال اجرا را فراهم میآورند. جزئیات را در پیوند زیر ببینید: https://www.gnu.org/software/gawk/manual/html_node/Auto_002dset.
- ROUNDMODE
- حالت گرد کردن برای محاسبات ریاضی با دقت دلخواه بر روی اعداد، به طور پیشفرض "N" (حالت roundTiesToEven طبق استاندارد IEEE-754). برای مشاهده جزئیات نشانی زیر را ببینید: https://www.gnu.org/software/gawk/manual/html_node/Setting-the-rounding-mode.
- RS
- جداکننده رکوردهای ورودی، که به صورت پیشفرض یک خط جدید است.
- RT
- خاتمهدهنده رکورد. Gawk متغیر RT را بر روی متن ورودی که با نویسه یا عبارت باقاعده تعیینشده توسط RS مطابقت داشته است، تنظیم میکند.
- RSTART
- شاخص نخستین نویسهای که با match() تطابق یافته است؛ در صورت عدم تطابق مقدار 0 خواهد بود.
- RLENGTH
- طول رشته تطابقیافته با match()؛ در صورت عدم تطابق مقدار -1 خواهد بود.
- SUBSEP
- رشتهای که برای جداسازی زیرنویسهای چندگانه در عناصر آرایه به کار میرود؛ به صورت پیشفرض "\034" است.
- SYMTAB
- آرایهای که شناسههای آن نام تمام متغیرها و آرایههای سراسری تعریفشده فعلی در برنامه هستند. شما مجاز به استفاده از دستور delete با آرایه SYMTAB نیستید، و همچنین نمیتوانید مقادیری به عناصری با نمایهای که نام متغیر نیست منتسب کنید.
- TEXTDOMAIN
- دامنه متنی برنامه AWK؛ برای یافتن ترجمههای بومیسازیشده برای رشتههای برنامه استفاده میشود.
آرایهها (Arrays)
آرایهها با یک عبارت درون براکت ([ و ]) نمایهگذاری میشوند. اگر عبارت یک فهرست از عبارتها باشد (expr, expr ...) در آن صورت شناسه آرایه رشتهای حاصل از پیوند مقادیر (رشتهای) هر عبارت خواهد بود که با مقدار متغیر SUBSEP از هم جدا شدهاند. این قابلیت برای شبیهسازی آرایههای چندبعدی به کار میرود. برای نمونه:
x[i, j, k] = "hello, world\n"
رشته "hello, world\n" را به عنصری از آرایه x منتسب میکند که نمایهاش رشته "A\034B\034C" است. تمامی آرایهها در AWK پیوندی (associative) هستند، یعنی با مقادیر رشتهای اندیسگذاری میشوند.
عملگر ویژه in میتواند برای آزمایش این که آیا آرایهای دارای اندیسی با مقدار خاصی است یا خیر، به کار رود:
if (val in array) print array[val]
اگر آرایه دارای چندین زیرنویس باشد، از عبارت (i, j) in array استفاده کنید.
ساختار in همچنین میتواند در یک حلقه for برای پیمایش بر روی تمام عناصر یک آرایه به کار رود. با این وجود، ساختار (i, j) in array تنها در آزمونهای شرطی کار میکند و در حلقههای for کاربردی ندارد.
یک عنصر را میتوان با دستور delete از آرایه حذف کرد. دستور delete همچنین میتواند برای حذف کامل تمام محتویات یک آرایه، تنها با مشخص کردن نام آرایه بدون زیرنویس به کار گرفته شود.
دستور gawk از آرایههای چندبعدی واقعی پشتیبانی میکند. نیازی نیست که چنین آرایههایی همانند زبان C یا C++ حتماً “مستطیلی” باشند. پیوند زیر را برای جزئیات ملاحظه کنید: https://www.gnu.org/software/gawk/manual/html_node/Arrays.
فضاهای نام (Namespaces)
ابزار Gawk یک سازوکار ساده فضای نام (namespace) ارائه میدهد تا به دور زدن این محدودیت که تمام متغیرها در AWK سراسری هستند کمک نماید.
یک نام واجد شرایط (qualified name) از دو شناسه ساده تشکیل میشود که با دو دونقطه (::) به هم پیوند خوردهاند. شناسه سمت چپ نشاندهنده فضای نام و شناسه سمت راست متغیر درون آن است. تمامی نامهای ساده (غیر واجد شرایط) متعلق به فضای نام “جاری” به شمار میآیند؛ فضای نام پیشفرض awk است. با این حال، شناسههای سادهای که صرفاً از حروف بزرگ تشکیل یافتهاند، حتی اگر فضای نام جاری متفاوت باشد، به اجبار درون فضای نام awk قرار میگیرند.
شما فضای نام جاری را با دستورالعمل @namespace "name" تغییر میدهید.
نام توابع توکار پیشتعریفشده استاندارد نمیتوانند به عنوان نام فضای نام به کار روند. نام توابع اضافی ارائهشده توسط gawk میتوانند به عنوان نام فضای نام یا به عنوان شناسههای ساده در سایر فضاهای نام مورد استفاده قرار گیرند. برای جزئیات بیشتر به نشانی زیر رجوع فرمایید: https://www.gnu.org/software/gawk/manual/html_node/Namespaces.html#Namespaces.
نوعبندی و تبدیل متغیرها (Variable Typing And Conversion)
متغیرها و فیلدها میتوانند اعداد (ممیز شناور)، یا رشتهها، یا هر دو باشند. آنها همچنین میتوانند عبارتهای باقاعده باشند. چگونگی تفسیر مقدار یک متغیر به بافت و زمینه بهکارگیری آن بستگی دارد. اگر در یک عبارت عددی به کار رود، مانند یک عدد رفتار خواهد کرد؛ اگر به عنوان رشته استفاده شود، همانند یک رشته با آن برخورد میشود.
برای اجبار یک متغیر به این که به عنوان یک عدد تلقی شود، مقدار صفر را به آن اضافه کنید؛ برای اجبار آن به رفتار رشتهای، آن را با یک رشته تهی پیوند دهید.
متغیرهای مقداردهینشده دارای مقدار عددی صفر و مقدار رشتهای "" (رشته خالی یا تهی) هستند.
هنگامی که یک رشته باید به یک عدد تبدیل شود، تبدیل با استفاده از تابع strtod(3) انجام میپذیرد. تبدیل یک عدد به رشته با استفاده از مقدار CONVFMT به عنوان رشته قالببندی برای تابع sprintf(3) با مقدار عددی متغیر به عنوان آرگومان صورت میگیرد. با این وجود، با این که تمام اعداد در AWK ممیز شناور هستند، مقادیر صحیح همواره به عنوان اعداد صحیح تبدیل میشوند.
ابزار Gawk مقایسهها را به شرح زیر انجام میدهد: اگر دو متغیر عددی باشند، مقایسه به صورت عددی انجام میپذیرد. اگر یک مقدار عددی باشد و دیگری دارای مقدار رشتهای باشد که یک “رشته عددی (numeric string)” است، مقایسه باز هم به شکل عددی صورت میگیرد. در غیر این صورت، مقدار عددی به یک رشته تبدیل شده و مقایسه رشتهای انجام میپذیرد. دو رشته، البته، به صورت رشته با یکدیگر مقایسه میشوند.
توجه داشته باشید که ثابتهای رشتهای، مانند "57"، رشته عددی نیستند بلکه ثابتهای رشتهای هستند. ایده “رشته عددی” تنها در مورد فیلدها، ورودی حاصل از getline، عناصر FILENAME، عناصر ARGV، عناصر ENVIRON و عناصر یک آرایه ایجادشده توسط split() یا patsplit() که رشتههای عددی هستند اعمال میشود. ایده اساسی این است که ورودی کاربر، و تنها ورودی کاربر که ظاهری عددی دارد، باید با آن به عنوان عدد برخورد شود.
ثابتهای هشتهشتی و شانزدهشانزدهی (Octal and Hexadecimal Constants)
شما میتوانید از ثابتهای اکتال (هشتهشتی) و هگزادسیمال (شانزدهشانزدهی) به سبک C در کد منبع برنامه AWK خود استفاده نمایید. برای نمونه، مقدار اکتال 011 برابر با عدد اعشاری (دهدهی) 9 است و مقدار هگزادسیمال 0x11 برابر با عدد دهدهی 17 است.
ثابتهای رشتهای (String Constants)
ثابتهای رشتهای در AWK دنبالهای از نویسهها هستند که بین علامتهای نقلقول جفت (گیومه) محصور شدهاند (مانند "value"). درون رشتهها، توالیهای گریز (escape sequences) خاصی همانند زبان C شناخته میشوند. برای مشاهده جزئیات به پیوند زیر رجوع فرمایید: https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences.
ثابتهای عبارت باقاعده (Regexp Constants)
یک ثابت عبارت باقاعده دنبالهای از نویسهها است که بین دو ممیز رو به جلو (اسلش) قرار گرفته است (مانند /value/).
توالیهای گریز توصیفشده در راهنما همچنین میتوانند درون ثابتهای عبارت باقاعده استفاده شوند (برای نمونه، /[ \t\f\n\r\v]/ با نویسههای فاصله خالی تطابق دارد).
دستور Gawk ثابتهای عبارت باقاعده با نوعبندی قوی (strongly typed) را فراهم میکند. این ثابتها با یک علامت @ در ابتدا نوشته میشوند (به این صورت: @/value/). چنین ثابتهایی را میتوان به اسکالرها (متغیرها، عناصر آرایه) نسبت داد و به توابع تعریفشده توسط کاربر ارسال کرد. متغیرهایی که به این صورت مقداردهی شدهاند از نوع عبارت باقاعده خواهند بود.
الگوها و کنشها (PATTERNS AND ACTIONS)
زبان AWK یک زبان خطمحور است. ابتدا الگو میآید و سپس کنش. دستورات کنش درون آکولادهای { و } محصور میشوند. الگو میتواند وجود نداشته باشد، یا کنش میتواند وجود نداشته باشد، اما نه هر دوی آنها به طور همزمان. اگر الگو وجود نداشته باشد، کنش برای تکتک رکوردهای ورودی اجرا میشود. یک کنشِ جاافتاده و تعریفنشده معادل عبارت زیر است:
{ print }
که کل رکورد را چاپ میکند.
توضیحات (کامنتها) با نویسه # شروع میشوند و تا انتهای خط ادامه مییابند. خطوط خالی میتوانند برای جداسازی دستورات به کار روند. به طور معمول، یک دستور با یک خط جدید خاتمه مییابد؛ با این حال، این امر برای خطوطی که به یک کاما، {، ?، :، && یا || ختم میشوند صدق نمیکند. خطوطی که به do یا else ختم میشوند نیز به طور خودکار دستوراتشان در خط بعدی ادامه مییابد. در سایر موارد، یک خط میتواند با قرار دادن یک نویسه “\” در انتهای آن ادامه یابد، که در این حالت خط جدید نادیده گرفته میشود. با این حال، درج “\” بعد از یک # خاصیتی ندارد.
میتوان چندین دستور را با قرار دادن یک “;” میان آنها در یک خط قرار داد. این امر هم برای دستورات درون بخش کنش یک جفت الگو-کنش (حالت معمول) و هم برای خود گزارههای الگو-کنش صدق میکند.
الگوها (Patterns)
الگوهای AWK میتوانند یکی از موارد زیر باشند:
BEGIN END BEGINFILE ENDFILE /regular expression/ relational expression pattern && pattern pattern || pattern pattern ? pattern : pattern (pattern) ! pattern pattern1, pattern2
دو الگوی BEGIN و END دو نوع ویژه از الگوها هستند که در برابر ورودی آزمایش نمیشوند. بخشهای کنش تمام الگوهای BEGIN به گونهای با یکدیگر ادغام میشوند که گویی تمام دستورات در یک قاعده BEGIN واحد نوشته شدهاند. آنها پیش از خوانده شدن هرگونه ورودی اجرا میگردند. به همین ترتیب، تمام قواعد END ادغام شده و هنگامی که تمام ورودیها به پایان رسید (یا زمانی که یک دستور exit اجرا شد) به اجرا درمیآیند. الگوهای BEGIN و END نمیتوانند با سایر الگوها در عبارتهای الگویی ترکیب شوند. الگوهای BEGIN و END نمیتوانند فاقد بخش کنش باشند.
الگوهای BEGINFILE و ENDFILE الگوهای ویژه دیگری هستند که کنشهای آنها پیش از خواندن نخستین رکورد از هر فایل ورودی خط فرمان و پس از خواندن آخرین رکورد از هر فایل اجرا میشوند. درون قاعده BEGINFILE، مقدار ERRNO در صورت باز شدن موفقیتآمیز فایل، یک رشته خالی خواهد بود. در غیر این صورت، مشکلی در فایل وجود دارد و کد باید از nextfile برای نادیده گرفتن آن استفاده کند. اگر این کار انجام نشود، gawk خطای مهلک معمول خود را برای فایلهایی که باز نمیشوند صادر میکند.
برای الگوهای /regular expression/، دستور مربوطه برای هر رکورد ورودی که با عبارت باقاعده مطابقت داشته باشد اجرا میشود. عبارتهای باقاعده اساساً همانند موارد موجود در egrep(1) هستند. برای جزئیات مربوط به عبارتهای باقاعده پیوند زیر را ببینید: https://www.gnu.org/software/gawk/manual/html_node/Regexp.html.
یک عبارت رابطهای (relational expression) میتواند از هر یک از عملگرهای تعریفشده در بخش زیر در مورد کنشها استفاده کند. این عبارتها عموماً بررسی میکنند که آیا فیلدهای خاصی با عبارتهای باقاعده مشخصی مطابقت دارند یا خیر.
عملگرهای &&، || و ! به ترتیب عملگرهای عطف منطقی (AND)، فصل منطقی (OR) و نفی منطقی (NOT) مشابه با زبان C هستند. این عملگرها ارزیابی اتصال کوتاه (short-circuit) را مانند C انجام میدهند و برای ترکیب عبارتهای الگویی پایهایتر به کار میروند. همانند اکثر زبانها، میتوان از پرانتز برای تغییر ترتیب ارزیابی استفاده کرد.
عملگر ?: مانند همان عملگر در زبان C است. اگر الگوی اول درست باشد، الگوی مورد استفاده برای ارزیابی الگوی دوم خواهد بود، در غیر این صورت الگوی سوم است. تنها یکی از الگوهای دوم یا سوم ارزیابی میشود.
شکل pattern1, pattern2 از یک عبارت، الگوی بازهای (range pattern) نامیده میشود. این الگو با تمامی رکوردهای ورودی که از رکوردی منطبق بر pattern1 آغاز شده و تا رکوردی منطبق بر pattern2 (شامل خود آن) ادامه مییابند، مطابقت میکند. این الگو با هیچ نوع دیگری از عبارتهای الگویی ترکیب نمیشود.
کنشها (Actions)
دستورات کنش درون آکولادها، { و }، محصور میشوند. دستورات کنش شامل دستورات معمول انتساب، شرطی و حلقهها هستند که در بیشتر زبانها یافت میشوند. عملگرها، دستورات کنترلی و گزارههای ورودی/خروجی موجود، از زبان C الگوبرداری شدهاند.
عملگرها (Operators)
عملگرها در AWK به ترتیب تقدم نزولی عبارتند از:
- (...)
- گروهبندی
- $
- ارجاع به فیلد.
- ++ --
- افزایش و کاهش، هم پیشوندی و هم پسوندی.
- ^
- به توان رساندن.
- + - !
- مثبت یگانی، منفی یگانی و نقیض منطقی.
- * / %
- ضرب، تقسیم و باقیمانده.
- + -
- جمع و تفریق.
- فاصله
- پیوند رشتهها (الحاق).
- | |&
- ورودی/خروجی لولهبندیشده برای getline، print و printf.
- < > <= >= == !=
- عملگرهای رابطهای معمول.
- ~ !~
- تطابق با عبارت باقاعده، نفی تطابق با عبارت باقاعده.
- in
- عضویت در آرایه.
- &&
- عطف منطقی (AND).
- ||
- فصل منطقی (OR).
- ?:
- عبارت شرطی به سبک C. این ساختار به فرم expr1 ? expr2 : expr3 است. اگر expr1 درست باشد، مقدار عبارت برابر با expr2 خواهد بود، در غیر این صورت مقدار آن expr3 است. تنها یکی از دو عبارت expr2 و expr3 ارزیابی میشود.
- = += -= *= /= %= ^=
- انتساب. هم انتساب مستقیم (var = value) و هم انتسابهای مرکب با عملگر (سایر شکلها) پشتیبانی میشوند.
دستورات کنترلی (Control Statements)
دستورات کنترلی به شرح زیر هستند:
if (condition) statement [ else statement ]
while (condition) statement
do statement while (condition)
for (expr1; expr2; expr3) statement
for (var in array) statement
break
continue
delete array[index]
delete array
exit [ expression ]
{ statements }
switch (expression) {
case value|regex : statement
...
[ default: statement ]
}
دستورات ورودی/خروجی (I/O Statements)
دستورات ورودی/خروجی به شرح زیر هستند:
- close(file [, how])
- بستن یک فایل باز، لوله یا همروند (coprocess). آرگومان اختیاری how تنها هنگام بستن یک سر از لوله دوطرفه به یک همروند باید استفاده شود. این مقدار باید یک رشته باشد، یا "to" یا "from".
- getline
- تنظیم $0 از رکورد ورودی بعدی؛ تنظیم متغیرهای NF، NR، FNR و RT.
- getline <file
- تنظیم $0 از رکورد بعدی file؛ تنظیم NF و RT.
- getline var
- تنظیم متغیر var از رکورد ورودی بعدی؛ تنظیم NR، FNR و RT.
- getline var <file
- تنظیم var از رکورد بعدی file؛ تنظیم RT.
- command | getline [var]
- اجرای دستور command، و هدایت خروجی آن به درون $0 یا var، مشابه موارد بالا، و تنظیم RT.
- command |& getline [var]
- اجرای command به عنوان یک همروند و هدایت خروجی آن به درون $0 یا var، مشابه موارد بالا، و تنظیم RT. (دستور command میتواند یک سوکت نیز باشد. زیربخش نامهای ویژه پرونده در ادامه را ببینید.)
- fflush([file])
- تخلیه بافرهای مرتبط با فایل یا لوله خروجی باز file. اگر file ارائه نشود یا رشته تهی باشد، تمام فایلها و لولههای خروجی باز تخلیه میشوند.
- next
- توقف پردازش رکورد ورودی جاری. رکورد ورودی بعدی را میخواند و پردازش را از نخستین الگوی برنامه AWK از سر میگیرد. پس از رسیدن به انتهای دادههای ورودی، هر قاعده END را اجرا میکند.
- nextfile
- توقف پردازش فایل ورودی جاری. رکورد ورودی بعدی از فایل ورودی بعدی خوانده میشود. متغیرهای FILENAME و ARGIND را بهروزرسانی میکند، FNR را به 1 بازنشانی نموده و پردازش را از نخستین الگوی برنامه AWK از سر میگیرد. پس از رسیدن به انتهای دادههای ورودی، هر قاعده ENDFILE و END را به اجرا درمیآورد.
- چاپ رکورد جاری. رکورد خروجی با مقدار ORS خاتمه مییابد.
- print expr-list
- چاپ عبارتها. هر عبارت با مقدار OFS از بعدی جدا میشود. رکورد خروجی با مقدار ORS خاتمه مییابد.
- print expr-list >file
- چاپ عبارتها درون پرونده file. هر عبارت با مقدار OFS تفکیک میشود. رکورد خروجی با مقدار ORS خاتمه مییابد.
- printf fmt, expr-list
- قالببندی و چاپ.
- printf fmt, expr-list >file
- قالببندی و چاپ درون پرونده file.
- system(cmd-line)
- اجرای دستور cmd-line، و بازگرداندن وضعیت خروج (exit status). (این قابلیت ممکن است در سیستمهای غیر-POSIX در دسترس نباشد.) نشانی زیر را برای جزئیات کامل وضعیت خروج ببینید: https://www.gnu.org/software/gawk/manual/html_node/I_002fO-Functions.html#I_002fO-Functions.
تغییر مسیرهای خروجی اضافی برای print و printf مجاز است:
- print ... >> file
- افزودن خروجی به انتهای file.
- print ... | command
- نوشتن روی یک لوله.
- print ... |& command
- ارسال داده به یک همروند یا سوکت. (همچنین به زیربخش نامهای ویژه پرونده در ادامه مراجعه فرمایید.)
تابع getline در صورت موفقیت عدد 1، در پایان فایل عدد صفر و در صورت بروز خطا مقدار -1 را برمیگرداند. اگر مقدار errno(3) نشان دهد که عملیات ورودی/خروجی ممکن است دوباره امتحان شود، و مقدار PROCINFO["input", "RETRY"] تنظیم شده باشد، آنگاه به جای -1 مقدار -2 بازگردانده میشود و فراخوانیهای بعدی به getline میتواند انجام شود. در صورت بروز خطا، ERRNO روی رشتهای تنظیم میشود که مشکل را شرح میدهد.
نکته: شکست در باز کردن یک سوکت دوطرفه منجر به بازگشت خطای غیرمهلک به تابع فراخواننده میشود. اگر از یک لوله، همروند یا سوکت برای getline، یا از print یا printf درون یک حلقه استفاده میکنید، باید از close() برای ایجاد نمونههای تازه از دستور یا سوکت استفاده کنید. AWK به طور خودکار لولهها، سوکتها یا همروندها را هنگام بازگرداندن پایان فایل (EOF) نمیبندد.
نسخههای AWK از دستور printf و تابع sprintf() مشابه با همتایان خود در زبان C هستند. برای مشاهده جزئیات پیوند زیر را ببینید: https://www.gnu.org/software/gawk/manual/html_node/Printf.html.
نامهای ویژه پرونده (Special File Names)
هنگام انجام تغییر مسیر ورودی/خروجی از print یا printf به درون یک فایل، یا از طریق getline از یک فایل، gawk برخی از نامهای پرونده ویژه را در درون خود شناسایی میکند. این نامهای فایل امکان دسترسی به توصیفکنندههای فایلِ بازی را که از فرآیند والد gawk (معمولاً پوسته یا shell) به ارث رسیدهاند، فراهم میسازند. این نامهای فایل را میتوان در خط فرمان نیز برای نامگذاری فایلهای داده استفاده کرد. این نامها عبارتند از:
- -
- ورودی استاندارد.
- /dev/stdin
- ورودی استاندارد.
- /dev/stdout
- خروجی استاندارد.
- /dev/stderr
- خروجی خطای استاندارد.
- /dev/fd/n
- فایل مرتبط با توصیفکننده فایل باز n.
نامهای فایل ویژه زیر میتوانند با عملگر همروند |& برای ایجاد ارتباطات شبکهای TCP/IP به کار روند:
- /inet/tcp/lport/rhost/rport
- /inet4/tcp/lport/rhost/rport
- /inet6/tcp/lport/rhost/rport
- فایلهایی برای اتصال TCP/IP در پورت محلی lport به میزبان راه دور rhost روی پورت راه دور rport. از درگاه (پورت) 0 استفاده کنید تا سیستم خودش یک درگاه انتخاب نماید. از /inet4 برای اجبار به ارتباط IPv4 و از /inet6 برای اجبار به ارتباط IPv6 استفاده کنید. عبارت ساده /inet از پیشفرض سیستم (به احتمال زیاد IPv4) استفاده میکند. این نامها فقط با عملگر ورودی/خروجی دوطرفه |& قابل استفاده هستند.
- /inet/udp/lport/rhost/rport
- /inet4/udp/lport/rhost/rport
- /inet6/udp/lport/rhost/rport
- مشابه موارد بالا، اما به جای TCP/IP از UDP/IP استفاده میکند. پشتیبانی از UDP منسوخ شده است و در آینده حذف خواهد شد.
توابع عددی (Numeric Functions)
زبان AWK دارای توابع ریاضی توکار زیر است:
- atan2(y, x)
- بازگرداندن قوستانژانت (آرکتانژانت) y/x بر حسب رادیان.
- cos(expr)
- بازگرداندن کسینوس expr، که بر حسب رادیان است.
- exp(expr)
- تابع نمایی (پایه e).
- int(expr)
- قطع کردن و تبدیل به عدد صحیح (حذف بخش اعشاری).
- log(expr)
- تابع لگاریتم طبیعی.
- rand()
- بازگرداندن یک عدد تصادفی N، بین صفر و یک، به طوری که 0 ≤ N < 1.
- sin(expr)
- بازگرداندن سینوس expr، که بر حسب رادیان است.
- sqrt(expr)
- بازگرداندن ریشه دوم (جذر) expr.
- srand([expr])
- استفاده از expr به عنوان هسته (seed) جدید برای مولد اعداد تصادفی. اگر هیچ expr ارائه نشود، از زمان جاری سیستم استفاده میشود. این تابع هسته پیشین مولد اعداد تصادفی را بازمیگرداند.
توابع رشتهای (String Functions)
دستور Gawk دارای توابع رشتهای توکار زیر است؛ جزئیات در پیوند زیر ارائه شده است: https://www.gnu.org/software/gawk/manual/html_node/String-Functions.
- asort(s [, d [, how] ])
- بازگرداندن تعداد عناصر در آرایه مبدا s. محتویات s را بر اساس قواعد معمول gawk برای مقایسه مقادیر مرتب نموده و نمایههای مقادیر مرتبشده s را با اعداد صحیح متوالی که از 1 شروع میشوند جایگزین میکند. اگر آرایه مقصد اختیاری d تعیین شده باشد، ابتدا s درون d تکثیر شده و سپس d مرتب میشود، به طوری که نمایههای آرایه مبدا s دستنخورده باقی میمانند. رشته اختیاری how جهت و حالت مقایسه را کنترل میکند. مقادیر معتبر برای how در پیوند زیر شرح داده شدهاند: https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions. s و d میتوانند یک آرایه یکسان باشند؛ این امر تنها در صورت ارائه آرگومان سوم معنا پیدا میکند.
- asorti(s [, d [, how] ])
- بازگرداندن تعداد عناصر در آرایه مبدا s. رفتار آن مشابه با asort() است، با این تفاوت که از نمایههای آرایه برای مرتبسازی استفاده میشود نه از مقادیر آرایه. پس از پایان، آرایه به صورت عددی اندیسگذاری میشود و مقادیر عناصر، همان نمایههای اصلی خواهند بود. مقادیر اصلی از بین میروند؛ بنابراین اگر میخواهید مقادیر اولیه حفظ شوند، یک آرایه دوم ارائه دهید. هدف از رشته اختیاری how مشابه با asort() است. در اینجا نیز s و d میتوانند یک آرایه یکسان باشند؛ این مورد نیز تنها در صورت ارائه آرگومان سوم کاربرد دارد.
- gensub(r, s, h [, t])
- جستجوی رشته هدف t برای انطباق با عبارت باقاعده r. اگر h رشتهای باشد که با g یا G آغاز میشود، تمام تطابقهای r را با s جایگزین میکند. در غیر این صورت، h عددی است که نشان میدهد کدام تطابق از r باید جایگزین شود. اگر t ارائه نشود، از $0 استفاده میشود. درون متن جایگزین s، توالی \n، که در آن n یک رقم از 1 تا 9 است، میتواند برای مشخص کردن متنی که با n'امین زیرعبارت محصور در پرانتز تطابق یافته است به کار رود. توالی \0 نشاندهنده کل متن تطابقیافته است، همانطور که نویسه & نیز چنین میکند. بر خلاف sub() و gsub()، رشته تغییریافته به عنوان نتیجه تابع بازگردانده میشود و رشته هدف اصلی تغییر نمیکند .
- gsub(r, s [, t])
- به ازای هر زیررشته منطبق بر عبارت باقاعده r در رشته t، رشته s را جایگزین نموده و تعداد دفعات جایگزینی را بازمیگرداند. اگر t عرضه نشود، از $0 استفاده میشود. یک & در متن جایگزین با متنی که واقعاً مطابقت یافته است جایگزین میشود. از \& برای درج یک & لفظی استفاده کنید. (این مورد باید به صورت "\\&" تایپ شود؛ برای شرح کامل قوانین علامتهای امپرسند و بکاسلش در متن جایگزین sub()، gsub() و gensub()، نشانی زیر را ببینید: https://www.gnu.org/software/gawk/manual/html_node/Gory-Details.html#Gory-Details).
- index(s, t)
- بازگرداندن شاخص و موقعیت رشته t درون رشته s، یا صفر در صورتی که t وجود نداشته باشد. (این نشان میدهد که شاخصهای نویسه از یک آغاز میشوند.)
- length([s])
- بازگرداندن طول رشته s، یا طول $0 چنانچه s ارائه نشده باشد. با یک آرگومان آرایه، length() تعداد عناصر موجود در آرایه را بازمیگرداند.
- match(s, r [, a])
- بازگرداندن موقعیتی در s که در آن عبارت باقاعده r رخ داده است، یا صفر چنانچه r حضور نداشته باشد، و تنظیم مقادیر RSTART و RLENGTH. توجه داشته باشید که ترتیب آرگومانها مشابه با عملگر ~ است: str ~ re. نشانی زیر را برای توضیحات مربوط به نحوه پر شدن آرایه a در صورت ارائه آن ببینید: https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions.
- patsplit(s, a [, r [, seps] ])
- تقسیم رشته s به درون آرایه a و آرایه جداکنندهها seps بر اساس عبارت باقاعده r، و بازگرداندن تعداد فیلدها. مقادیر عناصر بخشهایی از s هستند که با r تطابق یافتهاند. مقدار seps[i] جداکننده (احتمالاً تهی) است که پس از a[i] ظاهر شده است. مقدار seps[0] جداکننده ابتدایی (احتمالاً تهی) است. اگر r حذف شود، از FPAT استفاده میشود. آرایههای a و seps ابتدا پاکسازی میشوند. تقسیمبندی دقیقاً مشابه تفکیک فیلد با FPAT رفتار میکند.
- split(s, a [, r [, seps] ])
- تقسیم رشته s به درون آرایه a و آرایه جداکنندهها seps بر اساس عبارت باقاعده r، و بازگرداندن تعداد فیلدها. اگر r حذف شود، از FS استفاده میشود. آرایههای a و seps ابتدا خالی میشوند. seps[i] جداکننده فیلدی است که توسط r بین a[i] و a[i+1] تطابق یافته است. تقسیمبندی رفتاری مشابه با تفکیک فیلدها دارد.
- sprintf(fmt, expr-list)
- قالببندی expr-list بر اساس fmt، و بازگرداندن رشته حاصل.
- strtonum(str)
- بررسی str، و بازگرداندن مقدار عددی آن. اگر str با یک 0 ابتدایی آغاز شود، با آن به عنوان یک عدد اکتال (هشتهشتی) برخورد میکند. اگر str با 0x یا 0X آغاز گردد، با آن به عنوان یک عدد هگزادسیمال (شانزدهشانزدهی) رفتار میشود. در غیر این صورت، فرض میشود که یک عدد دهدهی است.
- sub(r, s [, t])
- دقیقاً مانند gsub()، اما تنها نخستین زیررشته منطبق را جایگزین میکند. مقدار صفر یا یک را بازمیگرداند.
- substr(s, i [, n])
- بازگرداندن زیررشته حداکثر n-نویسهای از s که از موقعیت i آغاز میشود. اگر n حذف شود، از بقیه s استفاده میشود.
- tolower(str)
- بازگرداندن رونوشتی از رشته str، که در آن تمامی نویسههای بزرگ به معادلهای کوچک خود تبدیل شدهاند. نویسههای غیرالفبایی بدون تغییر باقی میمانند.
- toupper(str)
- بازگرداندن رونوشتی از رشته str، که در آن تمامی نویسههای کوچک به معادلهای بزرگ خود تبدیل شدهاند. نویسههای غیرالفبایی بدون تغییر باقی میمانند.
دستور Gawk از چندبایتی آگاه است. این بدان معناست که توابع index()، length()، substr() و match() همگی بر حسب نویسهها عمل میکنند، نه بایتها.
توابع زمان (Time Functions)
دستور Gawk توابع زیر را برای دریافت برچسبهای زمانی و قالببندی آنها ارائه میدهد. جزئیات در پیوند زیر تشریح شده است: https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.
- mktime(datespec [, utc-flag])
- تبدیل datespec به یک برچسب زمانی مشابه با آنچه توسط systime() بازگردانده میشود، و بازگرداندن نتیجه. اگر utc-flag حضور داشته باشد و غیرصفر یا غیرتهی باشد، فرض میشود زمان در منطقه زمانی UTC است؛ در غیر این صورت زمان در منطقه زمانی محلی در نظر گرفته میشود. اگر datespec حاوی عناصر کافی نباشد یا زمان حاصل خارج از محدوده باشد، mktime() مقدار -1 را بازمیگرداند. برای جزئیات ساختار datespec، پیوند زیر را ببینید: https://www.gnu.org/software/gawk/manual/html_node/Time-Functions.html#Time-Functions.
- strftime([format [, timestamp[, utc-flag]]])
- قالببندی timestamp مطابق با مشخصات ارائهشده در format. اگر utc-flag وجود داشته باشد و غیرصفر یا غیرتهی باشد، نتیجه در منطقه زمانی UTC خواهد بود، در غیر این صورت نتیجه در زمان محلی است. مقدار timestamp باید از همان فرم بازگرداندهشده توسط systime() باشد. اگر timestamp حذف شود، از زمان فعلی سیستم استفاده میگردد. اگر format حذف شود، قالب پیشفرض معادل با خروجی دستور date(1) استفاده میشود. قالب پیشفرض در PROCINFO["strftime"] در دسترس است. برای آگاهی از تبدیلهای قالبی تضمینشده، مشخصات تابع strftime() در استاندارد ISO C را ملاحظه نمایید.
- systime()
- بازگرداندن زمان جاری روز به صورت تعداد ثانیههای سپریشده از مبدا زمان یونیکس (Epoch: 1970-01-01 00:00:00 UTC در سیستمهای POSIX).
توابع دستکاری بیتی (Bit Manipulations Functions)
دستور Gawk توابع دستکاری بیتی زیر را ارائه میدهد. این توابع با تبدیل مقادیر ممیز شناور با دقت مضاعف به اعداد صحیح uintmax_t، انجام عملیات، و سپس تبدیل نتیجه به ممیز شناور کار میکنند. ارسال عملوندهای منفی به هر یک از این توابع موجب خطای مهلک میشود.
توابع عبارتند از:
- and(v1, v2 [, ...])
- بازگرداندن AND بیتی مقادیر ارائهشده در فهرست آرگومانها. باید حداقل دو آرگومان وجود داشته باشد.
- compl(val)
- بازگرداندن مکمل بیتی (وارون بیتی) val.
- lshift(val, count)
- بازگرداندن مقدار val، شیفتیافته به چپ به تعداد count بیت.
- or(v1, v2 [, ...])
- بازگرداندن OR بیتی مقادیر ارائهشده در فهرست آرگومانها. حداقل دو آرگومان باید وجود داشته باشد.
- rshift(val, count)
- بازگرداندن مقدار val، شیفتیافته به راست به تعداد count بیت.
- xor(v1, v2 [, ...])
- بازگرداندن XOR بیتی مقادیر ارائهشده در فهرست آرگومانها. حداقل دو آرگومان باید وجود داشته باشد.
توابع بررسی نوع (Type Functions)
توابع زیر اطلاعات مربوط به نوع آرگومانهای خود را فراهم میسازند.
- isarray(x)
- بازگرداندن درستی (true) چنانچه x یک آرایه باشد، و نادرستی (false) در غیر این صورت.
- typeof(x)
- بازگرداندن رشتهای که نشاندهنده نوع x است. این رشته یکی از مقادیر زیر خواهد بود: "array", "number", "number|bool", "regexp", "string", "strnum", "unassigned", یا "untyped".
توابع بینالمللیسازی (Internationalization Functions)
توابع زیر میتوانند از درون برنامه AWK شما برای ترجمه رشتهها در زمان اجرا استفاده شوند. برای جزئیات کامل پیوند زیر را ببینید: https://www.gnu.org/software/gawk/manual/html_node/I18N-Functions.html#I18N-Functions.
- bindtextdomain(directory [, domain])
- مشخص کردن
پوشهای که
gawk در آن به
دنبال
فایلهای
.gmo
میگردد،
در صورتی که
این
فایلها در
مکانهای
“استاندارد”
قرار
نگرفته
باشند یا
نتوان
آنها را در
آنجا قرار
داد. این
تابع
دایرکتوری
را که domain به
آن “متصل (bound)”
شده است
بازمیگرداند.
دامنه پیشفرض domain، مقدار TEXTDOMAIN است. اگر directory یک رشته تهی ("") باشد، آنگاه bindtextdomain() اتصال فعلی برای domain دادهشده را بازمیگرداند.
- dcgettext(string [, domain [, category]])
- بازگرداندن ترجمه string در دامنه متنی domain برای دستهبندی محلی category. مقدار پیشفرض برای domain مقدار جاری TEXTDOMAIN است. مقدار پیشفرض برای category برابر با "LC_MESSAGES" است.
- dcngettext(string1, string2, number [, domain [, category]])
- بازگرداندن شکل جمع مناسب برای number از ترجمه string1 و string2 در دامنه متنی domain برای دستهبندی محلی category. مقدار پیشفرض برای domain مقدار فعلی TEXTDOMAIN است. مقدار پیشفرض برای category برابر با "LC_MESSAGES" است.
توابع با مقادیر بولی (Boolean Valued Functions)
شما میتوانید مقادیری با نوع بولی ویژه ایجاد کنید؛ برای چگونگی کارکرد و چرایی وجود آنها راهنما را ملاحظه فرمایید.
- mkbool(expression)
- بر اساس مقدار بولی expression، یک مقدار true یا یک مقدار false بازمیگرداند. مقادیر درست (true) مقدار عددی یک دارند. مقادیر نادرست (false) مقدار عددی صفر دارند.
توابع (FUNCTIONS)
توابع در AWK به صورت زیر تعریف میشوند:
توابع هنگامی که از درون عبارتها در الگوها یا کنشها فراخوانی شوند به اجرا درمیآیند. پارامترهای واقعی ارائهشده در فراخوانی تابع، برای مقداردهی به پارامترهای رسمی اعلامشده در تابع استفاده میشوند. آرایهها با ارجاع (by reference) و سایر متغیرها با مقدار (by value) ارسال میگردند.
متغیرهای محلی به عنوان پارامترهای اضافی در فهرست پارامترها اعلان میشوند. قرارداد رایج این است که متغیرهای محلی را با فاصلههای اضافی در فهرست پارامترها از پارامترهای واقعی جدا کنند. برای نمونه:
function f(p, q, a, b) # a و b متغیرهای محلی هستند
{
...
}
/abc/ { ... ; f(1, 2) ; ... }
پرانتز چپ در فراخوانی یک تابع باید بلافاصله پس از نام تابع قرار گیرد، بدون این که هیچ فاصله خالی میان آنها باشد. این محدودیت برای توابع توکار که در بالا فهرست شدند اعمال نمیشود.
توابع میتوانند یکدیگر را فراخوانی کنند و میتوانند بازگشتی (recursive) باشند. پارامترهای تابعی که به عنوان متغیرهای محلی استفاده میشوند، در هنگام فراخوانی تابع با رشته تهی و عدد صفر مقداردهی اولیه میگردند.
از دستور return expr برای بازگرداندن یک مقدار از یک تابع استفاده کنید. چنانچه مقداری ارائه نشود، یا تابع بدون رسیدن به دستور بازگشت و با “رسیدن به انتهای بدنه” خارج شود، مقدار بازگشتی تعریفنشده خواهد بود.
توابع میتوانند به صورت غیرمستقیم فراخوانی شوند. برای این کار، نام تابعی را که باید فراخوانی شود، به صورت یک رشته به یک متغیر نسبت دهید. سپس از متغیر همانند نام یک تابع استفاده کنید، در حالی که یک علامت @ در ابتدای آن قرار دارد، به این صورت:
function myfunc()
{
print "myfunc called"
...
}
{ ...
the_func = "myfunc"
@the_func() # فراخوانی تابع myfunc از طریق the_func
...
}
اگر گزینه --lint عرضه شده باشد، gawk هنگام تجزیه کد (parse time) به جای زمان اجرا (run time) درباره فراخوانی توابع تعریفنشده هشدار میدهد. فراخوانی یک تابع تعریفنشده در زمان اجرا یک خطای مهلک (fatal error) است.
بارگذاری پویای توابع جدید (DYNAMICALLY LOADING NEW FUNCTIONS)
شما میتوانید توابع جدید نوشتهشده به زبان C یا C++ را به صورت پویا با استفاده از گزاره @load به مفسر در حال اجرای gawk اضافه کنید. شرح کامل جزئیات فراتر از حوصله این صفحه راهنما است؛ نشانی زیر را ببینید: https://www.gnu.org/software/gawk/manual/html_node/Dynamic-Extensions.html#Dynamic-Extensions.
سیگنالها (SIGNALS)
پروفایلر gawk دو سیگنال را میپذیرد. سیگنال SIGUSR1 موجب میشود پروفایل و پشته فراخوانی توابع در فایل پروفایل ریخته شود؛ این فایل یا awkprof.out است یا هر فایلی که با گزینه --profile نامگذاری شده باشد. سپس برنامه به اجرای خود ادامه میدهد. سیگنال SIGHUP موجب میشود gawk پروفایل و پشته فراخوانی توابع را ذخیره کرده و سپس خارج شود.
بینالمللیسازی (INTERNATIONALIZATION)
ثابتهای رشتهای دنبالهای از نویسهها هستند که در گیومه محصور شدهاند. در محیطهای غیرانگلیسیزبان، میتوان رشتهها را در برنامه AWK به گونهای نشانهگذاری کرد که نیاز به ترجمه به زبان طبیعی محلی داشته باشند. چنین رشتههایی در برنامه AWK با یک خط زیر ابتدایی (“_”) نشانهگذاری میشوند. برای نمونه:
همیشه عبارت hello, world را چاپ میکند. اما:
ممکن است در فرانسه عبارت bonjour, monde را چاپ کند. مراحل لازم برای تولید و اجرای یک برنامه AWK با قابلیت محلیسازی را در پیوند زیر مشاهده فرمایید: https://www.gnu.org/software/gawk/manual/html_node/Internationalization.html#Internationalization.
افزونههای گنو (GNU EXTENSIONS)
ابزار Gawk دارای تعداد بسیار زیادی افزونه نسبت به awk در استاندارد POSIX است. این افزونهها در نشانی زیر تشریح شدهاند: https://www.gnu.org/software/gawk/manual/html_node/POSIX_002fGNU.html. تمامی این افزونهها را میتوان با فراخوانی gawk همراه با گزینههای --traditional یا --posix غیرفعال کرد.
متغیرهای محیطی (ENVIRONMENT VARIABLES)
متغیر محیطی AWKPATH میتواند برای ارائه فهرستی از پوشهها به کار رود که gawk هنگام جستجوی فایلهای نامبرده با گزینههای -f، --file، -i و --include، و دستورالعملهای @include و @nsinclude آنها را جستجو میکند. چنانچه جستجوی نخستین ناموفق باشد، مسیر پس از افزودن .awk به نام فایل دوباره مورد جستجو قرار میگیرد.
متغیر محیطی AWKLIBPATH میتواند برای ارائه فهرستی از دایرکتوریها به کار رود که gawk هنگام جستجوی فایلهای نامبرده با گزینههای -l و --load در آنها به جستجو میپردازد.
متغیر محیطی GAWK_PERSIST_FILE، در صورت وجود، فایلی را برای استفاده به عنوان ذخیرهساز پشتیبان حافظه ماندگار مشخص میکند. برای جزئیات به GAWK: Effective AWK Programming مراجعه فرمایید.
متغیر محیطی GAWK_READ_TIMEOUT میتواند برای تعیین زمان انتظار (timeout) بر حسب میلیثانیه برای خواندن ورودی از ترمینال، لوله یا ارتباط دوطرفه از جمله سوکتها به کار رود.
برای اتصال به یک میزبان راه دور از طریق سوکت، GAWK_SOCK_RETRIES تعداد تلاشهای مجدد، و GAWK_MSEC_SLEEP فاصله زمانی میان تلاشها را کنترل میکند. این فاصله بر حسب میلیثانیه است. در سیستمهایی که از usleep(3) پشتیبانی نمیکنند، مقدار به یک عدد صحیح از ثانیهها به سمت بالا گرد میشود.
اگر POSIXLY_CORRECT در محیط موجود باشد، در این صورت gawk دقیقاً به گونهای رفتار میکند که انگار گزینه --posix در خط فرمان مشخص شده است. اگر گزینه --lint مشخص شده باشد، gawk یک پیام هشدار در این رابطه صادر میکند.
وضعیت خروج (EXIT STATUS)
اگر از دستور exit با یک مقدار استفاده شود، در این صورت gawk با مقدار عددی ارائهشده به آن خارج میشود.
در غیر این صورت، اگر هیچ مشکلی در طول اجرا رخ نداده باشد، gawk با مقدار ثابت EXIT_SUCCESS در زبان C خارج میشود. این مقدار معمولاً صفر است.
در صورت بروز خطا، gawk با مقدار ثابت EXIT_FAILURE در زبان C خارج میشود که معمولاً یک است.
اگر gawk به دلیل یک خطای مهلک خارج شود، وضعیت خروج برابر با 2 خواهد بود. در سیستمهای غیر-POSIX، این مقدار ممکن است به EXIT_FAILURE نگاشت شود.
اطلاعات نسخه (VERSION INFORMATION)
این صفحه راهنما نسخه 5.4 ابزار gawk را مستند میسازد.
نویسندگان (AUTHORS)
نسخه اصلی awk در UNIX توسط آلفرد آهو (Alfred Aho)، پیتر واینبرگر (Peter Weinberger) و برایان کرنیگان (Brian Kernighan) از آزمایشگاههای بل (Bell Laboratories) طراحی و پیادهسازی شد. اوزان ییگیت (Ozan Yigit) نگهدارنده فعلی آن است. برایان کرنیگان گهگاه در توسعه آن همکاری میکند.
پل روبین (Paul Rubin) و جی فنلسون (Jay Fenlason)، از بنیاد نرمافزار آزاد، gawk را نوشتند تا با نسخه اصلی awk توزیعشده در ویرایش هفتم UNIX سازگار باشد. جان وودز (John Woods) تعدادی از اصلاحات باگ را ارائه کرد. دیوید ترومن (David Trueman)، همراه با مشارکتهای آرنولد رابینز (Arnold Robbins)، gawk را با نسخه جدید awk در UNIX سازگار کردند. آرنولد رابینز نگهدارنده فعلی است.
برای مشاهده فهرست کاملی از مشارکتکنندگان در gawk و مستندات آن، کتاب GAWK: Effective AWK Programming را ببینید.
فایل README موجود در بسته توزیع gawk را برای اطلاعات بهروز درباره نگهدارندگان و پورتهایی که در حال حاضر پشتیبانی میشوند ببینید.
گزارش باگها و پرسشها (BUG REPORTS AND QUESTIONS)
اگر باگی در gawk پیدا کردید، لطفاً از برنامه gawkbug(1) برای گزارش آن استفاده کنید.
دستورالعملهای کامل برای گزارش باگ در نشانی زیر ارائه شده است: https://www.gnu.org/software/gawk/manual/html_node/Bugs.html. لطفاً دستورالعملهای ارائهشده در آنجا را با دقت مطالعه و دنبال کنید. این امر گزارش باگ و حل آن را برای تمام افراد دخیل بسیار سادهتر خواهد کرد. واقعاً.
از سوی دیگر، چنانچه سؤالی در رابطه با چگونگی انجام یک کار خاص با استفاده از awk یا gawk دارید، یک رایانامه (ایمیل) با شرح درخواست راهنمایی خود به help-gawk@gnu.org ارسال کنید.
گزارش باگها (BUGS)
گزینه -F با توجه به ویژگی انتساب متغیرها در خط فرمان ضروری نیست؛ این گزینه تنها برای سازگاری با گذشته باقی مانده است.
این صفحه راهنما بسیار طولانی است؛ gawk ویژگیهای بسیار زیادی دارد.
همچنین ببینید (SEE ALSO)
egrep(1), sed(1), gawkbug(1), printf(3), و strftime(3).
The AWK Programming Language, second edition, Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger, Addison-Wesley, 2023. ISBN 9-780138-269722.
GAWK: Effective AWK Programming, Edition 5.4, shipped with the gawk source. The current version of this document is available online at https://www.gnu.org/software/gawk/manual.
The GNU gettext documentation, available online at https://www.gnu.org/software/gettext.
مثالها (EXAMPLES)
چاپ و مرتبسازی نام کاربری تمامی کاربران سیستم:
BEGIN { FS = ":" }
{ print $1 | "sort" }
شمارش تعداد خطوط در یک فایل:
{ nlines++ }
END { print nlines }
قرار دادن شماره خط در ابتدای هر خط از فایل:
{ print FNR, $0 }
الحاق و شمارهگذاری خطوط (روشی دیگر با کاربرد متفاوت):
{ print NR, $0 }
اجرای یک دستور خارجی برای خطوط داده خاص:
tail -f access_log |
awk '/myhome.html/ { system("nmap " $1 ">> logdir/myhome.html") }'
مجوزهای رونوشتبرداری (COPYING PERMISSIONS)
Copyright © 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026 Free Software Foundation, Inc.
اجازه داده میشود نسخههای کلمهبهکلمه (verbatim) از این صفحه راهنما تهیه و توزیع شود، مشروط بر این که یادداشت حقنشر و این اجازه در تمامی نسخهها حفظ شود.
اجازه داده میشود نسخههای تغییریافته این صفحه راهنما تحت شرایط نسخهبرداری کلمهبهکلمه کپی و توزیع شوند، مشروط بر این که کل اثر اشتقاقی حاصل، تحت شرایط اجازهنامهای یکسان با این اجازهنامه توزیع گردد.
اجازه داده میشود ترجمههای این صفحه راهنما به زبانهای دیگر، تحت شرایط فوق برای نسخههای تغییریافته کپی و توزیع شوند، با این استثنا که این یادداشت اجازه میتواند در قالب ترجمهای که توسط بنیاد تایید شده باشد بیان گردد.
| 2026-03-02 | Free Software Foundation |