فرمان Linux را یاد بگیرید - gawk

نام

gawk - الگوریتم اسکن و پردازش زبان

خلاصه داستان

gawk [گزینه های POSIX یا گنو سبک] -f برنامه-فایل [ - ] فایل ...
gawk [گزینه های POSIX یا گنو سبک] [ - ] فایل برنامه متن ...

pgawk [گزینه های POSIX یا گنو سبک] -f program-file [ - ] file ...
pgawk [گزینه های POSIX یا گنو سبک] [ - ] فایل برنامه متن ...

شرح

Gawk اجرای پروژه GNU زبان برنامه نویسی AWK است. این مطابق با تعریف زبان در استاندارد فرمان زبان و نرم افزار POSIX 1003.2 است. این نسخه به نوبه خود بر اساس توضیحات در زبان برنامه نویسی AWK ، توسط Aho، Kernighan و Weinberger، با ویژگی های اضافی موجود در سیستم V نسخه 4 نسخه یونیکس awk است . گاوک همچنین جدیدترین فرمت های awk در آزمایشگاه بل و برخی از برنامه های افزودنی خاص گنو ارائه می دهد.

Pgawk نسخه پروفایل gawk است . این به هر طریقی برای gawk یکسان است، به جز اینکه برنامه ها به آرامی اجرا می شوند و به صورت خودکار در هنگام انجام فایل awkprof.out فایل اجرایی ایجاد می کند. گزینه --profile زیر را ببینید.

خط فرمان متشکل از گزینه هایی است که به gawk خود، متن برنامه AWK (اگر از طریق گزینه های -f یا -file ارائه نمی شود)، و مقادیر موجود در ARGC و ARGV متغیرهای AWK از پیش تعریف شده ارائه شده است.

فرمت گزینه

گزینه های Gawk ممکن است گزینه های یک POSIX سنتی یا گزینه های بلند گنو باشند. گزینه های POSIX با یک `` - '' شروع می شوند، در حالی که گزینه های طولانی با `` - '' شروع می شوند. گزینه های طولانی برای هر دو ویژگی خاص GNU و برای ویژگی های POSIX مجوز ارائه شده است.

به دنبال استاندارد POSIX، گزینه های خاص gawk از طریق استدلال به گزینه -W ارائه می شود. گزینه های چندگانه -W ممکن است تامین شود هر گزینه -W دارای یک گزینه طولانی مربوطه است، همانطور که در زیر شرح داده شده است. Arguments to گزینه های طولانی با گزینه های an = sign همراه می شوند، بدون فضاهای مداخله ای و یا ممکن است در آرگومان خط فرمان بعدی ارائه شوند. گزینه های بلند ممکن است مختصر باشند، تا زمانی که مختصری باقی می ماند.

گزینه ها

گاوک گزینه های زیر را که به ترتیب حروف الفبا هستند را می پذیرد.

-F fs

--field-separator fs استفاده از fs برای جداساز فیلد ورودی (مقدار متغیر پیشنهادی FS ).

-v var = val

- assignment var = val مقدار value به متغیر var را قبل از اجرای برنامه تعیین می کند. چنین مقادیر متغیر در بلوک BEGIN یک برنامه AWK در دسترس است.

-f برنامه-فایل

--file program-file منبع AWK را از پرونده فایل فایل ، به جای آن از اولین آرگومان خط فرمان، خواند. گزینه های multiple -f (یا --file ) ممکن است مورد استفاده قرار گیرد.

-MF NNN

-mr NNN محدودیت حافظه مختلف را به مقدار NNN تنظیم کنید . پرچم f حداکثر تعداد فیلدها را تعیین می کند و پرچم r حداکثر اندازه ثبت را تعیین می کند. این دو پرچم و گزینه -m از نسخه آزمایشی Bell Laboratories awk UNIX است . آنها توسط gawk نادیده گرفته می شوند، زیرا gawk هیچ محدودیتی از پیش تعیین شده ای ندارد.

-W compat

-W سنتی

- کامپکت

- اجرای سراسری در حالت سازگاری در حالت سازگاری، gawk رفتار مشابه با awk UNIX است ؛ هیچ یک از پسوندهای خاص گنو قابل شناسایی نیستند. استفاده از - سنتی بیش از دیگر اشکال این گزینه ترجیح داده می شود. برای اطلاعات بیشتر به گامهای Extension GNU بروید .

کپی رایت کوه

-W کپی رایت

--copyleft

--copyright نسخه کوتاهی از پیام اطلاعات کپی رایت گنو را در خروجی استاندارد چاپ و با موفقیت خارج شوید.

-W پارامترهای متغیر [ = فایل ]

--dump-variables [ = file ] یک لیست مرتب شده از متغیرهای جهانی، نوع آنها و مقادیر نهایی را به فایل چاپ کنید . اگر هیچ فایل ارائه نشده باشد، gawk از یک فایل به نام awkvars.out در دایرکتوری فعلی استفاده می کند.

داشتن لیستی از همه متغیرهای جهانی راه خوبی برای جستجوی اشتباهات تایپی در برنامه های شماست. شما همچنین می توانید از این گزینه استفاده کنید اگر برنامه ای بزرگ با بسیاری از توابع داشته باشید و می خواهید اطمینان حاصل کنید که توابع شما به طور غریزی از متغیرهای جهانی استفاده نمی کنند که شما به معنای محلی هستید. (این یک اشتباه بسیار آسان است که با نام متغیر ساده مانند i ، j و غیره انجام شود.)

کمکم کن

-W استفاده کنید

--کمک

--usage یک خلاصه نسبتا کوتاه از گزینه های موجود در خروجی استاندارد را چاپ کنید. (بر اساس استانداردهای کدگذاری گنو ، این گزینه باعث خروجی فوری و موفقیتآمیز می شود.)

-W lint [ = فاخته ]

--lint [ = fatal ] هشدارهایی در مورد ساختارهایی که مشکوک یا غیر قابل حمل به دیگر برنامه های AWK هستند را ارائه می دهد. با یک آرگومان اختیاری از هشدارهای مرگبار ، آلودگی خطاهای مهلک است. این ممکن است شدید باشد، اما استفاده از آن قطعا برنامه های پاک کننده AWK را تشویق خواهد کرد.

-چون قدیمی

-lint-old هشدارهایی در مورد ساختارهایی که به نسخه اصلی Unikk awk قابل حمل نیستند ارائه می شود.

-W gen-po

--gen-po اسکن و تجزیه برنامه AWK و ایجاد یک فایل فرمت GNU .po در خروجی استاندارد با ورودی برای تمام رشته های قابل تنظیم در برنامه. برنامه خود اجرا نشده است. اطلاعات بیشتر در مورد فایل های .po را ببینید.

-W غیر دهدهی-داده

- داده های بدون اعشاری مقادیر اکتال و هگزادسیمال را در داده های ورودی به رسمیت می شناسد. از این گزینه با احتیاط بسیار استفاده کنید!

-موضوع

--posix این حالت سازگاری را با محدودیت های زیر ادامه می دهد:

*

\ x دنباله فرار شناسایی نمی شوند.

*

فقط فضایی و تب به عنوان جداسازی میدان عمل می کنند زمانی که FS به یک فضای اختصاص داده می شود، خط جدید خطا نمی دهد.

*

شما نمیتوانید خطوط را بعد از آن ادامه دهید ؟ و :

*

اصطلاح func برای عملکرد کلمه کلیدی شناخته شده نیست.

*

اپراتورهای ** و ** = نمی توانند به جای ^ و ^ = استفاده شوند .

*

عملکرد fflush () در دسترس نیست.

-W profile [ = prof_file ]

--profile [ = prof_file ] مشخصات پروفایل را به prof_file ارسال کنید . پیش فرض awkprof.out است . هنگامی که با gawk اجرا می شود، این نمایه تنها یک نسخه "" کاملا چاپ شده از برنامه است. هنگامی که با pgawk اجرا می شود، نمایه شامل تعداد اجرای هر عبارت در برنامه در حاشیه چپ و شمارش شمارش تابع برای هر تابع تعریف شده توسط کاربر است.

فاصله زمانی مجدد

--re-interval استفاده از عبارات فاصله را در تطبیق عبارات منظم فعال کنید (نگاه کنید به عبارات منظم ، در زیر). عبارات فاصله به طور سنتی در زبان AWK موجود نیست. استاندارد POSIX آنها را اضافه کرد تا awk و egrep سازگار با یکدیگر باشند. با این وجود، استفاده از آنها احتمالا برای شکستن برنامه های AWK قدیمی است، بنابراین gawk تنها آنها را فراهم می کند، اگر با این گزینه درخواست شوند، یا وقتی که - posix مشخص می شود.

-W منبع برنامه متن

- source -program-text استفاده از برنامه-متن به عنوان کد منبع برنامه AWK. این گزینه اجازه می دهد که میانبرهای ساده توابع کتابخانه (استفاده شده از طریق گزینه های -f و -file ) با کد منبع وارد شده در خط فرمان اجازه می دهد. این در درجه اول برای برنامه های AWK متوسط ​​تا بزرگ مورد استفاده در اسکریپت های پوسته قرار می گیرد.

نسخه W

--version اطلاعات نسخه نسخه برای این نسخه خاص gawk در خروجی استاندارد. این عمدتا مفید است برای دانستن اینکه آیا نسخه فعلی gawk در سیستم شما تا به امروز با توجه به آنچه که بنیاد نرم افزار آزاد توزیع می کند، به روز می شود. این نیز مفید است هنگام گزارش اشکالات. (بر اساس استانداردهای کدگذاری گنو ، این گزینه باعث خروجی فوری و موفقیتآمیز می شود.)

- سیگنال پایان گزینه ها این مفید است که اجازه می دهد استدلال های بیشتر برای خود برنامه AWK شروع با `` - ''. این عمدتا برای انطباق با کنوانسیون تجزیه و تحلیل استدلال استفاده شده توسط اکثر برنامه های POSIX است.

در حالت سازگاری، هر گزینه دیگری به عنوان نامعتبر علامت گذاری می شود، اما در غیر این صورت نادیده گرفته می شود. در عمل عادی، تا زمانی که متن برنامه عرضه شده است، گزینه های ناشناخته برای پردازش به برنامه AWK در آرایه ARGV منتقل می شوند. این به ویژه برای اجرای برنامه های AWK از طریق مکانیسم ترجمه کننده `` #! '' قابل اجرا است.

اجرای برنامه AWK

یک برنامه AWK شامل یک توالی از اظهارات عملگر الگو و تعاریف عملکرد اختیاری است.

الگو { اظهارات عملی }

نام تابع ( لیست پارامترها ) { statements }

گاوک ابتدا منبع برنامه را از فایل برنامه (ها) در صورت مشخص مشخص می کند، از استدلال به منبع - یا از اولین آرگومان غیر گزینه در خط فرمان. گزینه های -f و --ource ممکن است چندین بار در خط فرمان مورد استفاده قرار گیرد. Gawk متن برنامه را بخواند همانطور که تمام متون فایل program-file و متون خط فرمان به هم متصل شده اند. این برای ساختن کتابخانه های AWK مفید است، بدون اینکه آنها را در هر برنامه جدید AWK که از آنها استفاده می شود، شامل کند. همچنین توانایی ترکیب توابع کتابخانه با برنامه های خط فرمان را فراهم می کند.

متغیر محیطی AWKPATH یک مسیر جستجو را برای استفاده در هنگام یافتن فایل های منبع با نام -f انتخاب می کند. اگر این متغیر وجود ندارد، مسیر پیش فرض ".: / usr / local / share / awk" است . (دایرکتوری واقعی ممکن است بسته به اینکه چگونه gawk ساخته و نصب شده است متفاوت باشد.) اگر یک نام فایل داده شده به گزینه -f حاوی یک علامت `/ / 'باشد، جستجو مسیر انجام نمی شود.

گاوک برنامه های AWK را به ترتیب زیر اجرا می کند. ابتدا تمام وظایف متغیری که از طریق گزینه -v انجام شده است انجام می شود. بعد، gawk این برنامه را به شکل داخلی وارد می کند. سپس gawk کد را در BEGIN بلوک (ها) اجرا می کند (در صورت وجود)، و سپس هر فایل را که در آرایه ARGV خوانده می شود، خوانده می شود. اگر هیچ فایلی در خط فرمان وجود نداشته باشد، gawk ورودی استاندارد را می خواند.

اگر یک نام فایل در خط فرمان دارای فرم var = val است به عنوان یک تخصیص متغیر رفتار می شود. متغیر var ارزش val را تعیین می کند . (این اتفاق می افتد پس از هر بلوک BEGIN اجرا شده است.) تخصیص متغیر فرمان خط مفید است برای به طور پویا اختصاص مقادیر به متغیرهای AWK استفاده می کند برای کنترل نحوه ورودی به زمینه ها و سوابق شکسته است. همچنین برای کنترل وضعیت مفید است اگر گذر چند در یک فایل داده یکبار مورد نیاز باشد.

اگر مقدار یک عنصر خاص از ARGV خالی باشد ( ""gawk از آن عبور می کند.

برای هر رکورد در ورودی، آزمون gawk برای دیدن اینکه آیا آن را با هر الگوی در برنامه AWK مطابقت دارد. برای هر الگو که رکورد مطابقت دارد، عمل مرتبط انجام می شود. الگوها به ترتیب در برنامه اجرا می شوند.

در نهایت، پس از تمام ورودی خسته شده، gawk کد را در بلوک های END اجرا می کند (اگر وجود داشته باشد).

متغیرها، سوابق و زمینه ها

متغیرهای AWK پویا هستند؛ آنها زمانی که برای اولین بار استفاده می شوند، به وجود می آیند. مقادیر آنها یا عدد شناور یا رشته یا هر دو، بسته به نحوه استفاده آنها است. AWK همچنین یک آرایه ی بعدی دارد؛ آرایه ها با ابعاد مختلف می توانند شبیه سازی شوند. چندین متغیر از پیش تعریف شده به عنوان یک برنامه اجرا می شود؛ این ها به صورت مورد نیاز توصیف می شوند و در زیر خلاصه می شوند.

سوابق

به طور معمول، رکوردها با کاراکترهای رشته ای جدا می شوند. شما می توانید با اختصاص دادن مقادیر به متغیر ساخته شده در RS، کنترل کنید که چگونه پرونده ها جدا می شوند. اگر RS یک شخصیت واحد باشد، این شخصیت پرونده ها را جدا می کند. در غیر این صورت، RS یک عبارت منظم است. متن در ورودی که منطبق با این عبارت منظم است، رکورد را جدا می کند. با این حال، در حالت سازگاری، تنها اولین حرف از مقدار رشته آن برای جداسازی سوابق استفاده می شود. اگر RS به رشته صفر تنظیم شده باشد، پس از آن رکوردها توسط خطوط خالی جدا می شوند. هنگامی که RS به رشته صفر تنظیم می شود، شخصیت خطوط جدید همیشه به عنوان یک جداساز میدان عمل می کند، علاوه بر اینکه هر مقدار FS ممکن است داشته باشد.

زمینه های

همانطور که هر رکورد ورودی خوانده می شود، gawk رکورد را به فیلدها تقسیم می کند ، با استفاده از مقدار متغیر FS به عنوان جدا کننده زمینه. اگر FS یک کاراکتر تک باشد، فیلدها از این کاراکتر جدا می شوند. اگر FS یک رشته صفر است، پس هر یک از کاراکترهای یک فیلد جداگانه می شود. در غیر این صورت، FS انتظار می رود که یک عبارت منظم کامل باشد. در مورد خاصی که FS یک فضای تک است، فیلدها با استفاده از فاصله ها و / یا زبانه ها و / یا خطوط جدید جدا می شوند. (اما بحث در مورد --posix را ببینید ، در زیر). نکته: ارزش IGNORECASE (نگاه کنید به زیر) نیز بر روی چگونگی تقسیم فیلدها در زمانی که FS یک عبارات منظم است، و اینکه چگونه رکورد ها هنگامی که RS یک عبارات منظم است جدا می شود.

اگر متغیر FIELDWIDTHS بر روی لیستی از اعداد فضایی جدا شده باشد، انتظار می رود که هر فیلد دارای عرض ثابت باشد، و gawk رکورد را با استفاده از عرض مشخص شده تقسیم می کند. ارزش FS نادیده گرفته می شود. اختصاص یک مقدار جدید به FS ، استفاده از FIELDWIDTHS را منع می کند و رفتار پیش فرض را بازیابی می کند.

هر فیلد در رکورد ورودی می تواند با موقعیت آن، $ 1 ، $ 2 و غیره اشاره شود. $ 0 کل رکورد است. زمینه ها باید توسط ثابت ها ارجاع نشوند:

n = 5
چاپ $ n

فیلد پنجم در رکورد ورودی را چاپ می کند.

متغیر NF به تعداد کل فیلدها در رکورد ورودی تنظیم شده است.

پیوندهایی با فیلدهای غیر موجود (یعنی فیلدهای بعد از $ NF ) رشته صفر را تولید می کنند. با این حال، اختصاص به یک فیلد غیر موجود (مثلا $ (NF + 2) = 5 ) مقدار NF را افزایش می دهد، هر فیلد مداخله ای را با رشته صفر به عنوان مقدار آن ایجاد می کند و باعث می شود مقدار 0 $ با مقدار مجدد زمینه ها با ارزش OFS جدا می شوند. مراجع به فیلدهای شماره منفی باعث خطای مهلک می شود. Decrementing NF باعث می شود که مقادیر رشته ها از ارزش جدیدی که از دست می رود جلوگیری شود و مقدار 0 $ به مقدار مجددا با فیلدهای جدا شده با مقدار OFS .

اختصاص یک مقدار به یک فیلد موجود موجب می شود کل رکورد زمانی که صفر 0 اشاره شده بازسازی شود. به طور مشابه، اعطای یک مقدار به $ 0 موجب می شود که رکورد respl، ایجاد مقادیر جدید برای فیلدها باشد.

متغیرهای ساخته شده

متغیرهای ساخته شده Gawk عبارتند از:

ARGC

تعداد استدلال های خط فرمان (شامل گزینه هایی برای gawk یا منبع برنامه نیست).

ARGIND

شاخص در ARGV فایل فعلی پردازش می شود.

ARGV

آرایه ای از استدلال خط فرمان آرایه از 0 به ARGC - 1 نمایه می شود. تغییرات پویای محتوای ARGV می تواند فایل های مورد استفاده برای داده ها را کنترل کند.

BINMODE

در سیستم های غیر POSIX، استفاده از حالت `` باینری '' برای همه فایل I / O را مشخص می کند. مقادیر عددی 1، 2، یا 3، مشخص میکند که فایلهای ورودی، فایلهای خروجی یا همه فایلها به ترتیب باید از I / O باینری استفاده کنند. مقدار رشته ای "r" یا "w" مشخص می کند که فایل های ورودی یا فایل های خروجی به ترتیب باید از I / O باینری استفاده کنند. مقدار رشته ای از "rw" یا "wr" مشخص می کند که تمام فایل ها باید از I / O باینری استفاده کنند. هر مقدار رشته ای دیگر به عنوان "rw" تلقی می شود، اما یک پیام هشدار ایجاد می کند.

CONVFMT

فرمت تبدیل برای اعداد، "٪ .6g" ، به طور پیش فرض.

ENVIRON

آرایه حاوی مقادیر محیط کنونی است. آرایه توسط متغیرهای محیطی نشان داده می شود، هر عنصر ارزش آن متغیر است (به عنوان مثال ENVIRON ["HOME"] ممکن است / home / arnold باشد ). تغییر این آرایه روی محیطی که توسط برنامه هایی دیده می شود که gawk ایجاد می کند از طریق تغییر مسیر یا عملکرد system () تاثیر نمی گذارد.

ERRNO

اگر یک خطای سیستم رخ می دهد یا انجام یک جهت گیری برای getline ، در طی خواندن برای getline ، یا در طی نزدیک () ، سپس ERRNO شامل یک رشته توصیف خطا است. ارزش ترجمه به زبان های غیر انگلیسی است.

دامنه

لیست سفید فضایی از زمینه های عرضی جدا شده است. هنگام تنظیم، gawk ورودی را به فیلدهای عرض ثابت پردازش می کند، به جای استفاده از مقدار متغیر FS به عنوان جدا کننده میدان.

نام فایل

نام فایل ورودی فعلی. اگر هیچ فایل در خط فرمان مشخص نشده باشد، مقدار FILENAME `` - '' است. با این حال، FILENAME در داخل بلوک BEGIN تعریف نشده است (مگر اینکه توسط getline تنظیم شده باشد).

FNR

شماره ثبت ورودی در فایل ورودی فعلی.

FS

جداساز فیلد ورودی، فضای به طور پیش فرض. فیلد بالا را ببینید

IGNORECASE

حساسیت موردی تمام عملیات عبارات منظم و رشته را کنترل می کند. اگر IGNORECASE دارای مقدار غیر صفر باشد، سپس مقادیر رشته و تطبیق الگو در قوانین، تقسیم فیلد با FS ، رکورد جدا سازی با RS ، بیان منظم مطابق با ~ و ! ~ و gensub () ، gsub () ، index () ، توابع match () ، split () و sub () در هنگام انجام عملیات عبارات منظم، همه موارد را نادیده می گیرند. توجه: Subcripting آرایه تحت تاثیر قرار نمی گیرد، همچنین عملکرد asort () نیز وجود ندارد.

بنابراین، اگر IGNORECASE برابر صفر نباشد، / aB / همه رشته ها را "ab" ، "aB" ، "ab" و "AB" می نامند . همانطور که با تمام متغیرهای AWK، مقدار اولیه IGNORECASE صفر است، بنابراین همه عملیات عادی و رشته معمولا حساس به حروف هستند. در یونیکس، مجموعه کامل ایزو 8859-1 لاتین 1 در هنگام نادیده گرفتن مورد استفاده می شود.

لنت

کنترل پویا از گزینه -lint را از طریق برنامه AWK فراهم می کند. هنگامی که درست است، gawk هشدارهای لنت را چاپ می کند. هنگامی که نادرست است، آن را ندارد. وقتی مقدار رشته "مرگبار" تعیین می شود ، هشدارهای خطوط، خطاهای مهلک هستند، دقیقا مانند: - lint = fatal . هر مقدار واقعی دیگر فقط هشدارها را چاپ می کند.

NF

تعداد فیلدها در رکورد ورودی فعلی.

NR

تعداد کل سوابق ورودی تا کنون دیده شده است.

OFMT

فرمت خروجی برای اعداد، "٪ .6g" ، به طور پیش فرض.

OFS

جدایی میدان خروجی، فضای به طور پیش فرض.

ORS

جداکننده خروجی خروجی، به طور پیش فرض یک خط جدید است.

PROCINFO

عناصر این آرایه دسترسی به اطلاعات مربوط به برنامه AWK در حال اجرا را فراهم می کنند. در بعضی از سیستم ها، عناصر موجود در آرایه، "group1" از طریق "group n " برای بعضی از n ، که تعداد گروه های تکمیلی فرایندی است، وجود دارد. برای آزمایش این عناصر از اپراتور استفاده کنید. عناصر زیر در دسترس هستند:

PROCINFO ["egid"]

ارزش سیستم تماس (2) getegid (2).

PROCINFO ["euid"]

مقدار calltechnology (2) از طریق geteuid (2).

PROCINFO ["FS"]

"FS" اگر زمینه تقسیم با FS در اثر، و یا "FIELDWIDTHS" اگر زمینه تقسیم با FIELDWIDTHS در اثر است.

PROCINFO ["gid"]

مقدار دریافت سیستم (2) gutgid (2).

PROCINFO ["pgrpid"]

شناسه پردازش گروه فرآیند فعلی.

PROCINFO ["pid"]

شناسه پردازش روند فعلی.

PROCINFO ["ppid"]

شناسه فرآیند پدر و مادر از روند فعلی.

PROCINFO ["uid"]

ارزش callout سیستم getuid (2).

RS

جداکننده ورودی ورودی، به طور پیش فرض یک خط جدید است.

RT

ضبط کننده رکورد Gawk مجموعه RT را به متن ورودی می دهد که متن شخصیت یا عبارات منظم مشخص شده توسط RS را همسان کرده است.

RSTART

شاخص اول شخصیت مطابقت با match () ؛ 0 اگر هیچ مسابقه ای نیست (این بدان معنی است که شاخص کاراکتر در یک شروع می شود.)

RLENGTH

طول رشته هماهنگ با match () ؛ -1 اگر نباشید

بیا

کاراکتر مورد استفاده برای جدا کردن چندین شاخص در عناصر آرایه، به طور پیش فرض "\ 034" .

TEXTDOMAIN

دامنه متن برنامه AWK؛ برای پیدا کردن ترجمه های محلی برای رشته های برنامه استفاده می شود.

آرایه ها

آرایه ها با عبارت بین براکت های مربع (و [ و ] ) مشخص می شوند. اگر عبارت یک لیست بیان ( expr ، expr ...) باشد، زیرنویس آرایه یک رشته است که شامل پیوند (مقدار) رشته ای از هر عبارت، جدا از مقدار متغیر SUBSEP است. این تسهیلات برای شبیه سازی آرایه های اندازه گیری چندگانه استفاده می شود. مثلا:

من = "A"؛ J = "B"؛ k = "C"
x [i، j، k] = "سلام جهان \ n"

رشته "hello، world \ n" را به عنصر آرایه x که رشته "A \ 034B \ 034C" نامیده می شود، اختصاص می دهد . تمام آرایه ها در AWK associative هستند، یعنی شاخص های رشته ای.

اپراتور ویژه ممکن است در بیانیه ای در حالی که در حال استفاده است استفاده شود تا ببیند آیا یک آرایه حاوی یک عدد خاص است.

اگر (val در آرایه) آرایه چاپ [val]

اگر آرایه دارای چندین شاخص باشد، از (i، j) در آرایه استفاده کنید .

در ساختار نیز ممکن است در یک حلقه برای تکرار بر تمام عناصر یک آرایه استفاده شود.

یک عنصر از آرایه با استفاده از بیانیه حذف حذف می شود . بیانیه حذف همچنین می تواند برای حذف تمام محتویات یک آرایه، فقط با تعیین نام آرایه بدون زیرنویس باشد.

متغیر تایپ و تبدیل

متغیرها و فیلدها ممکن است (اعداد شناور) اعداد یا رشته ها یا هر دو باشد. چطور ارزش یک متغیر تفسیر می شود بستگی به آن دارد. اگر در عبارت عددی استفاده شود، آن را به عنوان یک عدد محسوب می شود، اگر به عنوان یک رشته استفاده شود، آن را به عنوان یک رشته پردازش می کند.

برای تحمیل یک متغیر به عنوان یک عدد، به 0 اضافه کنید؛ برای اینکه آن را به عنوان یک رشته پردازش کنیم، آن را با رشته صفر مرتبط کنیم.

وقتی یک رشته باید به یک عدد تبدیل شود، تبدیل با استفاده از strtod (3) انجام می شود. یک شماره به یک رشته با استفاده از مقدار CONVFMT به عنوان یک رشته فرمت برای sprintf (3)، با مقدار عددی متغیر به عنوان آرگومان تبدیل می شود. با این حال، حتی اگر تمام اعداد در AWK نقطه شناور باشند، مقادیر انتگرال همیشه به عنوان عدد صحیح تبدیل می شوند. بنابراین، داده شده است

CONVFMT = "٪ 2.2f" a = 12 b = a ""

متغیر b دارای مقدار رشته ای از "12" و نه "12.00" است .

گاوک مقایسه را به صورت زیر انجام می دهد: اگر دو متغیر عددی باشند، آنها با عددی مقایسه می شوند. اگر یک مقدار عددی است و دیگری دارای یک مقدار رشته ای است که یک رشته عددی است، سپس مقایسه ها نیز به صورت عددی انجام می شود. در غیر این صورت، مقدار عددی به یک رشته تبدیل می شود و مقایسه رشته انجام می شود. البته، به عنوان رشته ها، دو رشته مقایسه می شود. توجه داشته باشید که استاندارد POSIX مفهوم رشته عددی را در همه جا، حتی به رشته های ثابت، اعمال می کند. با این حال، این به وضوح نادرست است و gawk این کار را انجام نمی دهد. (خوشبختانه، این در نسخه بعدی استاندارد است.)

توجه داشته باشید که ثابت های رشته، مانند "57" ، رشته های عددی نیستند ، آنها رشته های ثابت هستند. ایده "رشته عددی" فقط برای زمینه ها، ورودی getline ، FILENAME ، عناصر ARGV ، عناصر ENVIRON و عناصر یک آرایه ایجاد شده توسط split () که رشته های عددی هستند، اعمال می شود. ایده اصلی این است که ورودی کاربر و تنها ورودی کاربر، به نظر عددی، باید با همین شیوه رفتار شود.

متغیرهای Uninitialized دارای مقدار عددی 0 و مقدار رشته "" (رشته صفر یا خالی) است.

Octal و Hexadecimal Constants

با شروع از نسخه 3.1 از gawk، شما می توانید از کد C-style هشتم و هگزادسیمال در کد منبع برنامه AWK استفاده کنید. به عنوان مثال، مقدار هشتم 011 برابر دهدهی ده برابر است و مقدار هگزادسیمال 0x11 برابر با دهدهی 17 است.

ثابت های رشته

ثابتهای رشته در AWK توالی کاراکترهای بین دو نقل قول ( " ) است. درون رشته ها، برخی از توالی های فرار شناخته می شوند، مانند در C. این عبارتند از:

\\

یک بکسلست لفظی

\ a

شخصیت `` هشدار ''؛ معمولا کاراکتر ASCII BEL.

\ b

پشت سر هم

\ f

فرم خوراک

\ n

خط جدید.

\ r

برگشت محموله.

\ t

زبانه افقی

\ v

برگه عمودی

\ x رقم شصت

شخصیتی که توسط رشته رقم های هگزادسیمال زیر \ x نشان داده شده است . همانطور که در ANSIC، تمام زیر ارقام هگزادسیمال به عنوان بخشی از توالی فرار در نظر گرفته می شوند. (این ویژگی باید چیزی درباره طراحی زبان توسط کمیته به ما بگوید.) به عنوان مثال، "\ x1B" شخصیت ASCIIESC (فرار) است.

\ ddd

شخصیت نمایش داده شده به ترتیب 1-، 2-، یا 3 رقمی از اعداد هشتم. مثلا، "\ 033" شخصیت ASCII ESC (فرار) است.

\ c

شخصیت حرف C

توالی فرار نیز ممکن است در داخل عبارات منظم ثابت استفاده شود (مثلا، / [\ t \ f \ n \ r \ v] / match characters of spacespace).

در حالت سازگاری، شخصیت های نمایش داده شده توسط دنباله های فرار اکتال و هگزادسیمال به معنای واقعی کلمه هنگامی که در ثابت های بیان منظم استفاده می شوند، مورد استفاده قرار می گیرند. بنابراین، / a \ 52b / برابر با / a \ * b / است .

الگوها و اقدامات

AWK یک زبان خطی است. الگوی اول، و سپس عمل است. اظهارات عملی در { و } محصور شده است. هر دو الگو ممکن است از دست رفته باشد، یا اقدام ممکن است از دست رفته باشد، اما البته هر دو. اگر الگوی از دست رفته باشد، عمل برای هر رکورد ورودی انجام می شود. یک عمل گمشده برابر است

{ چاپ }

که کل رکورد را چاپ می کند.

نظرات با حرف `` # '' شروع می شوند و تا پایان خط ادامه می دهند. خطوط خالی برای جدا کردن اظهارات استفاده می شود. به طور معمول، یک بیانیه با خط جدید به پایان می رسد، با این حال، این مورد برای خطوط پایان دادن به یک ``، ''، { ، ؟ ، : ، && ، یا || . خطوط پایان دادن به انجام یا دیگر نیز بیانیه های خود را به طور خودکار ادامه در خط زیر است. در موارد دیگر، یک خط را می توان با پایان دادن به آن با '، در این صورت خط جدید را نادیده گرفت.

اظهارات چندگانه ممکن است در یک خط با جداسازی آنها با یک `؛؛ 'قرار داده شود. این در مورد هر دو عبارت در بخش عمل یک جفت الگوی عملیاتی (مورد معمول) و نیز به اظهارات عملی الگوی عمل مربوط می شود.

الگوها

الگوهای AWK ممکن است یکی از موارد زیر باشد:

BEGIN END / الگوی بیان / بیان رابطه ای && الگو الگوی || الگوی الگو الگو : الگو ( الگو ) ! الگو الگوی 1 ، الگو2

BEGIN و END دو نوع خاص از الگوهای است که در برابر ورودی آزمایش نشده است. قسمت عملیاتی تمام الگوهای BEGIN ادغام می شوند به شرط اینکه همه اظهارات در یک بلوک واحد BEGIN نوشته شده باشند. آنها قبل از ورود هر کدام به خواندن اعداد اجرا می شوند. به همین ترتیب، تمام بلوک های END ادغام می شوند و هنگامی که تمام ورودی خسته می شوند (یا هنگامی که دستور خروج اجرا می شود) اجرا می شود. الگوهای BEGIN و END را نمی توان با الگوهای دیگر در عبارات الگو ترکیب کرد. الگوهای BEGIN و END می توانند قسمت های عمل نشده را نداشته باشند.

برای بیان / عبارات منظم / الگوهای، دستور مربوطه برای هر یک از رشته های ورودی اجرا می شود که با عبارات منظم مطابقت دارد. عبارات منظم همانهایی هستند که در egrep (1) وجود دارد و در زیر خلاصه شده است.

بیان رابطه ای می تواند از هر یک از اپراتورهای تعریف شده در زیر در بخش اقدامات استفاده کند. اینها به طور کلی آزمون می کنند که آیا برخی از فیلدها با عبارات منظم خاص مطابقت دارند.

&& ، || ، و ! اپراتورها منطقی هستند، منطقی OR، و منطقی NOT، به ترتیب، همانطور که در C. آنها ارزیابی اتصال کوتاه، همچنین به عنوان در C، و برای ترکیب عبارات الگوی ابتدایی استفاده می شود. همانطور که در اکثر زبانها، ممکن است از پرانتز برای تغییر جهت ارزیابی استفاده شود.

اپراتور؟: همان عملگر در C است. اگر الگوی اول درست باشد، الگوی مورد استفاده برای آزمایش دومین الگوی است، در غیر اینصورت سوم است. تنها یکی از الگوهای دوم و سوم ارزیابی می شود.

الگوی 1، الگوی 2 بیان یک الگوی دامنه نامیده می شود. این همه پرونده های ورودی را با یک رکورد که با الگو 1 مطابقت دارد، مطابقت می دهد و ادامه می دهد تا یک رکورد که با الگو 2 مطابقت دارد. آن را با هیچ گونه نوع بیان الگوی دیگر ترکیب نمی کند.

عبارات منظم

عبارات منظم نوع گسترده ای در egrep است . آنها از کاراکترهای زیر تشکیل می شوند:

ج

مطابقت غیر متاكاركتور C.

\ c

با شخصیت حرف C برابر است

.

هر شخصیت از جمله خط جدید را رعایت می کند.

^

منطبق با آغاز یک رشته است

$

پایان رشته را دنبال می کند

[ abc ... ]

لیست کاراکترها، هر یک از کاراکترهای abc ...

[^ abc ... ]

لیست کاراکترهای منفی، هر شخصیت به جز ABC ... مطابقت دارد.

r1 | r2

جایگزینی: مسابقات یا r1 یا r2 .

r1r2

پیوند: مسابقات r1 ، و سپس r2 .

R +

یک یا چند رشته را رعایت می کند.

ر *

مساوی صفر یا بیشتر است.

ر ؟

مساوی صفر یا یک ر .

( r )

گروه بندی: مسابقات R

r { n }

r { n }

r { n ، m } یک یا دو عدد در داخل braces بیانگر فاصله هستند . اگر یک عدد در braces وجود داشته باشد، عبارات پیشین قبلی r تکرار n بار است. اگر دو عدد با کاما جدا شده باشند، r به n بار تکرار می شود. اگر یک عدد به دنبال کاما وجود دارد، سپس r حداقل n بار تکرار می شود.

عبارات فاصله تنها در صورت امکان وجود دارد - either -posix یا --re-interval در خط فرمان مشخص شده است.

\ y

رشته خالی را در ابتدای یا پایان یک کلمه منطبق می کند.

\ B

رشته خالی را در یک کلمه منطبق می کند

\ <

رشته خالی را در ابتدای یک کلمه منطبق می کند.

\>

رشته خالی در انتهای یک کلمه منطبق است.

\ w

هر شخصیت کلمه (نامه، رقمی یا زیرخط) را برآورده می کند.

\ W

هر شخصیتی را که سازنده کلمه نیست، مطابقت می دهد.

\ `

رشته خالی در آغاز یک بافر (رشته) را رعایت می کند.

\ '

رشته خالی در پایان یک بافر مطابقت دارد.

توالی فرار که در ثابت های رشته معتبر است (نگاه کنید به زیر) نیز در عبارات منظم معتبر است.

کلاس های شخصیتی یک ویژگی جدید است که در استاندارد POSIX معرفی شده است. یک کلاس شخصیت یک نماد مخصوص برای توصیف لیستی از کاراکترهایی است که خاصیت خاص دارند اما شخصیت های واقعی خود را می توانند از کشور به کشور و / یا از شخصیت به مجموعه کاراکتر متفاوت باشد. به عنوان مثال، مفهوم کاراکتر حروف الفبا در ایالات متحده آمریکا و فرانسه متفاوت است.

یک کلاس کاراکتر فقط در یک عبارت منظم درون براکت های یک لیست کاراکتر معتبر است. کلاس های شخصیت عبارتند از :: کلمات کلیدی که در کلاس طبقه بندی می شوند، و :] . کلاس های شخصیتی تعریف شده توسط استاندارد POSIX عبارتند از:

[: alnum:]

کاراکترهای الفبا و عددی

[: alpha:]

حروف الفبایی

[:جای خالی:]

فضاها یا کاراکترهای تب.

[: cntrl:]

شخصیت های کنترل

[: رقمی:]

کاراکترهای عددی

[: نمودار:]

شخصیت هایی که قابل چاپ و قابل مشاهده هستند. (یک فضای قابل چاپ است، اما قابل مشاهده نیست، در حالی که یک یک است هر دو.)

[: پایین:]

حروف الفبای حروف کوچک

[:چاپ:]

کاراکترهای قابل چاپ (کاراکترهایی که کاراکترهای کنترل نیستند).

[: punct:]

کاراکترهای علامت گذاری (کاراکترهایی که حرف، رقم، کاراکترهای کنترل یا کاراکترهای فضایی نیستند) نیست.

[:فضا:]

کاراکترهای فضایی (مانند فضایی، برگه و فرمفید، برای نام چند).

[: بالا:]

کاراکتر حروف الفبا فوقانی

[: xdigit:]

شخصیت هایی که رقم هگزادسیمال هستند.

برای مثال، قبل از استاندارد POSIX، برای مطابقت با کاراکترهای alphanumeric، شما مجبور به نوشتن / [A-Za-z0-9] / . اگر مجموعه شخصیت شما دارای شخصیت های حروف الفبا دیگری باشد، این کار آنها را مطابقت نمی دهد و اگر شخصیت شما مجموعه ای متفاوت از ASCII باشد، ممکن است حتی با شخصیت های عددی عددی ASCII مطابقت نداشته باشد. با کلاس کاراکترهای POSIX شما می توانید [/: alnum:]] / را بنویسید و این کاراکترهای حروف الفبا و عددی را در مجموعه شخصیت های شما مطابقت می دهد.

دو توالی خاص دیگر می توانند در لیست کاراکتر ظاهر شوند. این موارد برای مجموعه کاراکترهای غیر ASCII اعمال می شود که می توانند نمادهای تک ( عناصر collating ) نامیده می شوند که با بیش از یک کاراکتر نمایش داده می شوند و همچنین چند کاراکتری که برای مقاصد مرتب سازی یا شمارش معادل هستند. (به عنوان مثال، در فرانسوی، ساده `` E '' و سنگ قبر لهجه و معادل آن هستند.)

تقسیم نمادها

یک علامت تقسیم یک عنصر جمع آوری چند حرف است که در [. و .] برای مثال، اگر ch یک عنصر collating است، پس [[.ch.]] عبارتی منظم است که با این عنصر collating مطابقت دارد، در حالی که [ch] عبارتی منظم است که با c یا h مطابقت دارد.

کلاسهای هم ارز

یک کلاس هم ارز یک نام محلی برای یک لیست از کاراکترهایی معادل است. نام در [= و =] محصور شده است. به عنوان مثال، نام e ممکن است مورد استفاده قرار گیرد برای نشان دادن تمام `` e، '' `` e '،' 'و `` e`.' 'در این مورد، [[= e =]] یک عبارت منظم است مسابقات هر یک از e ، e ' ، یا e` .

این ویژگی ها در مکان های غیر انگلیسی زبان بسیار ارزشمند است. توابع کتابخانه ای که gawk برای بیان منظم با استفاده از آن استفاده می کند، در حال حاضر فقط کلاس های POSIX را تشخیص می دهد؛ آنها علامت های تقسیم یا کلاس های هم ارز را نمی شناسند.

عملگرهای \ y ، \ B ، \ < ، \> ، \ w ، \ W ، \ ` ، و \ برای gawk خاص هستند؛ آنها بر اساس امکانات موجود در کتابخانه های عبارات منظم گنو هستند.

گزینه های مختلف خط فرمان کنترل نحوه تفسیر کاراکترها در عبارات منظم را توضیح می دهد.

بدون گزینه

در مورد پیش فرض، gawk تمامی امکانات عبارات منظم POSIX و اپراتورهای بیان منظم GNU را که در بالا توضیح داده شده فراهم می کند. با این حال، عبارات فاصله پشتیبانی نمی شوند.

- پیمایش

فقط عبارات منظم POSIX پشتیبانی می شوند، اپراتورهای GNU خاص نیستند. (به عنوان مثال، \ w مطابق با الف) w . عبارات فاصله ای مجاز هستند

--سنتی

عبارات منظم awk معمولی یونیکس همسان هستند. اپراتورهای گنو خاص نیستند، عبارات بازه ای در دسترس نیستند و نه کلاس های شخصیت POSIX ( [[: alnum:]] و غیره). شخصیت های توصیف شده توسط دنباله های فرار هشت و هگزادسیمال به معنای واقعی کلمه هستند، حتی اگر آنها بیانگر metacharacters بیان باشند.

- فاصله زمانی

اجازه عبارات فاصله را در عبارات منظم، حتی اگر - ارائه شده است.

اقدامات

اظهارات عملی در braces، { و } محصور شده است. اظهارات عملی متشکل از اظهارات معمولی، شرطی و حلقه ای است که در اکثر زبان ها یافت می شود. اپراتورها، اظهارات کنترل، و اظهارات ورودی / خروجی موجود بعد از آنها در C مشخص می شوند.

اپراتورها

اپراتورهای AWK، به منظور کاهش اولویت، هستند

( ... )

گروه بندی

$

مرجع میدان

++ -

افزایش و کاهش، هر دو پیشوند و postfix.

^

Exponentiation ( ** همچنین ممکن است استفاده شود و ** = برای اپراتور تخصیص).

+ -!

به طور کلی به علاوه، منفی منفی و نفی منطقی.

* /٪

ضرب، تقسیم و مدول.

+ -

جمع و تفریق.

فضا

پیوند رشته.

<>

<=> =

= == اپراتورهای ارتباطی منظم

~! ~

مطابقت عبارات منظم، بازی نفی شده. نکته: از عبارتی ثابت ثابت ( / foo / ) در سمت چپ یک ~ یا ! ~ استفاده نکنید . فقط از یک طرف سمت راست استفاده کنید. عبارت / foo / ~ exp معنای مشابهی دارد (($ 0 ~ / foo /) ~ exp ) . این معمولا چیزی نیست که در نظر گرفته شده باشد.

که در

عضویت در آرایه

&&

منطقی و

||

منطقی OR.

؟:

بیان شرطی C این فرم Expr1 است ؟ expr2 : expr3 . اگر expr1 درست باشد، مقدار بیان expr2 است، در غیر این صورت expr3 است . فقط یکی از expr2 و expr3 ارزیابی می شود.

= + = - =

* = / =٪ = ^ = تخصیص هر تخصیص مطلق ( var = value ) و تخصیص اپراتور (فرم دیگر) پشتیبانی می شوند.

بیانیه های کنترل

اظهارات کنترل به شرح زیر است:

اگر ( شرط ) statement [ else statement ] در حالی که عبارت condition ( condition ) برای عبارت ( expr1 ؛ expr2 ؛ expr3 ) برای عبارت ( var در آرایه ) بیانیه صادر می شود ، بایستی statement array [ index ] delete array exit [ expression ] { اظهارات }

بیانیه های I / O

اظهارات ورودی / خروجی به شرح زیر است:

نزدیک ( فایل [ ، چگونه ] )

بستن پرونده، لوله یا همکاری اختیاری چگونه باید در هنگام بستن یک انتهای یک لوله دو طرفه به یک پروسه همکاری استفاده شود. این باید یک مقدار رشته باشد، یا "به" یا "از" .

getline

0 دلار از رکورد ورودی بعدی تنظیم کنید مجموعه NF ، NR ، FNR .

getline < file

$ 0 از رکورد بعدی فایل تنظیم کنید تنظیم NF

getline var

تنظیم var از رکورد ورودی بعدی؛ تنظیم NR ، FNR .

getline var < file

تنظیمات را از رکورد بعدی فایل ذخیره کنید .

فرمان | getline [ var ]

اجرای فرمان خروجی را به 0 یا var تغییر دهید ، همانطور که در بالا ذکر شد.

فرمان & getline [ var ]

فرمان را به عنوان یک فرایند هماهنگ اجرا کنید و یا خروجی را به 0 یا یا همان بالا، وارد کنید. همکاری فرآیندها یک فرمت gawk است.

بعد

پردازش ورودی ورودی فعلی را متوقف کنید. رکورد ورودی بعدی خواندن و پردازش با اولین الگو در برنامه AWK آغاز می شود. اگر پایان داده های ورودی رسیده باشد، بلوک های END (اگرچه) اجرا می شوند.

nextfile

پردازش فایل ورودی فعلی را متوقف کنید. رکورد ورودی بعدی به عنوان خوانده شده از فایل ورودی بعدی می آید. FILENAME و ARGIND به روز می شوند، FNR به 1 بازنشانی می شود و پردازش با اولین الگوی برنامه AWK آغاز می شود. اگر پایان داده های ورودی رسیده باشد، بلوک های END (اگرچه) اجرا می شوند.

چاپ

رکورد فعلی را چاپ می کند رکورد خروجی با مقدار متغیر ORS خاتمه می یابد.

چاپ لیست expr

عبارات را چاپ می کند هر عبارت با مقدار متغیر OFS جدا شده است. رکورد خروجی با مقدار متغیر ORS خاتمه می یابد.

چاپ expr-list > file

عبارات را در فایل چاپ می کند. هر عبارت با مقدار متغیر OFS جدا شده است. رکورد خروجی با مقدار متغیر ORS خاتمه می یابد.

printf fmt، expr-list

فرمت و چاپ

printf fmt، expr-list > فایل

فرمت و چاپ روی فایل .

سیستم ( cmd-line )

دستور cmd-line را اجرا کنید و وضعیت خروج را بازگردانید. (این ممکن است در سیستم های غیر POSIX در دسترس باشد.)

fflush ( [ فایل ] )

هر بافر در ارتباط با فایل خروجی باز یا فایل لوله را خالی کنید . اگر فایل گم شده باشد، پس خروجی استاندارد فلاش می شود. اگر فایل رشته صفر است، پس همه فایل ها و خروجی های خروجی بافرهای خود را فریاد می زنند.

تغییرات خروجی اضافی برای چاپ و printf مجاز است.

چاپ ... >> فایل

خروجی را به فایل اضافه می کند.

چاپ ... | فرمان

بر روی یک لوله می نویسد.

چاپ ... | & فرمان

داده ها را به پروسه همکاری ارسال می کند.

دستور getline 0 در پایان فایل 0 و در خطا 0 -1. پس از یک خطا، ERRNO شامل یک رشته توصیف مشکل است.

توجه: اگر از یک لوله یا همکاری برای getline ، یا از print یا printf در یک حلقه استفاده کنید، باید از نزدیک () برای ایجاد موارد جدید دستور استفاده کنید. AWK به طور خودکار لوله ها یا فرآیندهای همپوشانی را هنگامی که EOF را پشت سر می گذارند بسته نمی کند.

بیانیه چاپی

نسخه AWK دستور printf و عملکرد sprintf () (زیر را ببینید) فرمت های مشخصات تبدیل زیر را می پذیرند:

٪ c

یک کاراکتر ASCII. اگر استدلال مورد استفاده برای ٪ c عددی است، آن را به صورت یک کاراکتر و چاپ می شود. در غیر این صورت، این استدلال فرض می شود که یک رشته است و اولین حرف اول آن رشته چاپ می شود.

٪ d ، ٪ i

یک عدد دهدهی (قسمت عدد صحیح).

٪ e،٪ E

عدد شناور از فرم [-] d.dddddde [+ -] dd . فرمت ٪ E از E به جای e استفاده می کند .

٪ f

یک عدد شناور از فرم [-] ddd.dddddd .

٪ g،٪ G

استفاده از تبدیل ٪ e یا ٪ f ، هر کدام که کوتاهتر باشد، با صفرهای نامطلوب سرکوب می شود. فرمت ٪ G از ٪ E به جای ٪ e استفاده می کند .

٪ o

یک عدد هشتم بدون امضا (همچنین یک عدد صحیح).

٪ تو یک عدد اعشاری بدون علامت (دوباره یک عدد صحیح).

٪ s

یک رشته کاراکتر

٪ x،٪ X

یک عدد هگزادسیمال بدون علامت (یک عدد صحیح). فرمت ٪ X از ABCDEF به جای abcdef استفاده می کند .

٪٪

یک کاراکتر ٪ بدون استدلال تبدیل شده است.

اختیاری، پارامترهای اضافی ممکن است بین ٪ و حرف کنترل وجود داشته باشد:

شمارش کردن

با استفاده از آرگومان count 'th در این نقطه در قالب بندی. این یک مشخص کننده موقعیتی نامیده می شود و در اصل برای استفاده در نسخه های ترجمه شده از رشته های فرمت، در متن اولیه یک برنامه AWK مورد استفاده قرار می گیرد. این یک فرمت gawk است.

-

این عبارت باید در حوزه ی خود توجیه شود.

فضا

برای تبدیل عددی، مقادیر مثبت را با یک فضای و مقادیر منفی با علامت منفی پیشوند کنید.

+

علامت پلاس، قبل از اصلاح کننده عرض استفاده می شود (نگاه کنید به زیر)، همیشه می گوید که علامت برای تبدیل عددی است، حتی اگر داده هایی که باید قالب بندی شوند مثبت است. + اصلاح کننده فضایی را منحرف می کند.

#

از "فرم متناوب" برای حروف کنترل خاص استفاده کنید. برای ٪ o ، یک صفر پیشرو را عرضه کنید. برای ٪ x و ٪ X ، یک پیشفرض 0x یا 0X برای نتیجه غیر صفر عرضه کنید. برای ٪ e ، ٪ E ، و ٪ f نتیجه همیشه یک نقطه اعشار دارد. برای ٪ g و ٪ G ، صفرهای عقب نشینی از نتیجه حذف نمی شوند.

0

پیشرو 0 (صفر) به عنوان یک پرچم عمل می کند، نشان می دهد که خروجی باید به جای فاصله ها با صفر باشد. این حتی برای فرمت های خروجی غیر عددی نیز صادق است. این پرچم تنها زمانی اثر می دهد که عرض فیلد شفاف تر از مقدار چاپی باشد.

عرض

زمینه باید به این عرض باشد. این فیلد معمولا با فضاهای پوشیده شده است. اگر پرچم 0 استفاده شده باشد، با صفر پر شده است.

. دقیقا

عددی که دقت را برای استفاده در هنگام چاپ مشخص می کند. برای ٪ e ، ٪ E ، و ٪ f فرمت، این تعداد تعداد رقم هایی را که می خواهید چاپ شده به سمت راست از نقطه اعشار تعیین می کند. برای ٪ g و ٪ G فرمت ها، حداکثر تعداد رقم قابل توجهی را مشخص می کند. برای ٪ d ، ٪ o ، ٪ i ، ٪ u ، ٪ x و ٪ X فرمت، حداقل تعداد رقم های چاپ را تعیین می کند. برای ٪ s ، حداکثر تعداد کاراکتر از رشته ای که باید چاپ شود را مشخص می کند.

پویای پویا و قابلیت های دقیق از دستورات ANSI C printf () پشتیبانی می شود. A * در عوض هر کدام از مشخصات عرض یا دقیق باعث می شود که مقادیر خود را از لیست استدلال به printf یا sprintf () بردارند . برای استفاده از مشخص کننده موقعیتی با عرض پویا یا دقیق، مقدار count را بعد از * در رشته فرمت ارسال کنید. به عنوان مثال، "٪ 3 $ * 2 $. * 1 $ s" .

نام فایل های خاص

هنگام انجام تغییر مسیر I / O از چاپ یا printf به یک فایل، یا از طریق getline از یک فایل، gawk نام خاصی از نام فایل های خاص را در داخل به رسمیت می شناسد. این نام فایل ها اجازه می دهد تا دسترسی به بازخوانی فایل های فایل باز شده از فرایند پدر و مادر gawk (معمولا پوسته) به ارمغان بیاورد . این نام فایل ها همچنین می تواند در خط فرمان برای نام فایل های داده استفاده شود. نام فایل ها عبارتند از:

/ dev / stdin

ورودی استاندارد

/ dev / stdout

خروجی استاندارد.

/ dev / stderr

خروجی استاندارد خطا.

/ dev / fd / n

فایل مرتبط با توصیفگر باز فایل n .

اینها برای پیام های خطا بسیار مفید هستند. مثلا:

چاپ "شما آن را منفجر کرد!" > "/ dev / stderr"

در حالی که شما در غیر این صورت مجبور به استفاده از

چاپ "شما آن را منفجر کرد!" | "گربه 1> و 2"

نام پرونده های خاص زیر ممکن است با اپراتور | & co-process برای ایجاد اتصالات شبکه TCP / IP استفاده شود.

/ inet / tcp / lport / rhost / rport

پرونده برای اتصال TCP / IP در port port lport به میزبان میزبان از راه دور در portport rport . از یک پورت 0 استفاده کنید تا سیستم یک پورت را انتخاب کند.

/ inet / udp / lport / rhost / rport

مشابه، اما استفاده از UDP / IP به جای TCP / IP.

/ inet / raw / lport / rhost / rport

رزرو شده برای استفاده در آینده.

سایر نامهای خاصی به اطلاعات مربوط به روند جابجایی gawk دسترسی دارند. این نام فایلها منسوخ شده است. برای کسب اطلاعاتی که ارائه می دهند از آرایه PROCINFO استفاده کنید. نام فایل ها عبارتند از:

/ dev / pid

خواندن این فایل، شناسه پردازش فرآیند فعلی، در دهدهی، با خط جدید خاتمه می یابد.

/ dev / ppid

خواندن این فایل، ID فرایند والدین را در دهدهی، با یک خط جدید خاتمه می دهد.

/ dev / pgrpid

خواندن این فایل، شناسه فرآیند گروه فرآیند فعلی، در دهدهی، با خط جدید خاتمه می یابد.

/ dev / user

خواندن این فایل یک رکورد واحد را با یک خط جدید خاتمه می دهد. زمینه ها با فضاهای تفکیک می شوند. $ 1 ارزش callback system getuid (2)، $ 2 مقدار calltechnic geteuid (2)، $ 3 مقدار callgid (2)، و $ 4 مقدار getegid (2) تماس سیستم اگر فیلدهای اضافی وجود دارد، آنها شناسه گروهی هستند که توسط گروههای دریافت شده (2) بازمی گردند . گروه های متعدد ممکن است در تمام سیستم ها پشتیبانی نشوند.

توابع عددی

AWK دارای عملکرد زیر است:

atan2 ( y ، x )

arctangent Y / X را در رادیان بازمی گرداند.

cos ( expr )

بازگشت cosis expr ، که در رادیان است.

exp ( expr )

تابع نمایشی

int ( expr )

تقسیم به عدد صحیح

ورودی ( expr )

عملکرد لگاریتم طبیعی.

رند ()

یک عدد تصادفی بین 0 و 1 را برمی گرداند.

گناه ( expr )

سینوس expr را که در رادیان قرار دارد را می پردازد.

sqrt ( expr )

تابع مربع ریشه.

srand ( [ expr ] )

Expr به عنوان یک بذر جدید برای ژنراتور عدد تصادفی استفاده می کند. اگر هیچ expr ارائه نشده است، زمان روز استفاده می شود. مقدار بازگشتی بذر قبلی برای ژنراتور عدد تصادفی است.

توابع رشته

گاوک دارای عملکرد زیر است:

asort ( s [ ، d ] )

تعداد عناصر موجود در آرایه منبع را بازمیگرداند. محتویات s با استفاده از قوانین طبیعی gawk برای مقایسه مقادیر مرتب می شوند و شاخص های مرتب شده s با عدد صحیح دنباله ای با شروع از 1 جایگزین می شوند. اگر آرایه d انتخابی اختیاری d مشخص شود، s اولین بار به d ، و سپس d مرتب شده و شاخص های آرایه ی منبع را بدون تغییر باقی می گذارد.

gensub ( r ، s ، h [ ، t ] )

جستجو در رشته t هدف برای مسابقات بیان منظم r . اگر h یک رشته است که از g یا G شروع می شود ، همه ی مسابقات r با s را جایگزین کنید. در غیر این صورت، h یک عدد است که نشان می دهد که کدام یک از r را جایگزین می کند. اگر t تامین شود، 0 دلار به جای آن استفاده می شود. در داخل متن جایگزین s ، توالی \ n ، جایی که n یک رقم از 1 تا 9 است، می تواند برای نشان دادن فقط متن که با مضامین ناسازگار به صورت زیر مرتبط است. دنباله \ 0 نشاندهنده تمام متن متناظر است، همانطور که شخصیت & . بر خلاف sub () و gsub () ، رشته اصلاح شده به عنوان نتیجه عملکرد باز می شود و رشته هدف اصلی تغییر نمی کند .

gsub ( r ، s [ ، t ] )

برای هر زیر رشته با رعایت عبارات منظم r در رشته t ، رشته s را جایگزین کنید و تعداد جایگزینی را بازگردانید. اگر t تامین نشده باشد، از $ 0 استفاده کنید. متن موجود در متن جایگزین با متن است که در واقع همسان شده است. از & lt؛ / & & & & (این باید به عنوان "\\ &" ؛ تایید شود؛ GAWK: برنامه نویسی AWK موثر برای بحث کامل در مورد قوانین برای و backslash ها در متن جایگزینی sub () ، gsub () و gensub ( )

شاخص ( s ، t )

شاخص رشته t را در رشته s بازمی گرداند یا 0 اگر t وجود نداشته باشد. (این بدان معنی است که شاخص کاراکتر در یک شروع می شود.)

طول ( [ s ] )

طول رشته s را می گیرد یا طول 0 $ اگر s ارائه نمی شود.

مسابقه ( s ، r [ ، a ] )

موقعیتی را در s جایی که عبارت منظم r رخ می دهد، یا 0 اگر r وجود نداشته باشد، و مقادیر RSTART و RLENGTH را تنظیم می کند . توجه داشته باشید که دستور argument مشابه عملگر ~ است: str ~ re . اگر آرایه ای A ارائه شده باشد، یک پاک می شود و سپس عناصر 1 تا n با بخش هایی از s که مطابق زیر تعریف پرانتز مربوطه در r هستند پر می شود . عنصر 0 عنصر a حاوی بخش S است که با کل عبارت منظم r همخوانی دارد.

تقسیم ( s ، a [ ، r ] )

رشته s به آرایه a در عبارات منظم r تقسیم می شود و تعداد فیلدها را باز می گرداند. اگر r حذف شود، FS به جای آن استفاده می شود. آرایه A برای اولین بار پاکسازی می شود. تقسیم بندی یکسان با تقسیم فیلد رفتار می کند که در بالا توضیح داده شده است.

sprintf ( fmt ، expr-list )

نسخه expr را بر اساس fmt چاپ می کند و رشته حاصل را برمی گرداند.

strtonum ( str )

بررسی می کند و مقداری عددی را به دست می آورد. اگر str با پیشرو 0 آغاز می شود، strtonum () فرض می کند که str یک عدد هشتم است. اگر str با پیشرو 0x یا 0X آغاز می شود، strtonum () فرض می کند که str یک عدد شانزده رقمی است.

زیر ( r ، s [ ، t ] )

همانند gsub () ، اما تنها اولین substring تطبیقی ​​جایگزین شده است.

substr ( s ، i [ ، n ] )

بیشترین n -character substring s را که در i شروع می شود را بر می گرداند. اگر n حذف شود، بقیه s مورد استفاده قرار می گیرد.

tolower ( str )

یک کپی از رشته str را بازمی گرداند، با تمام کاراکترهای بزرگ در str به همتایان مربوطه آنها مربوط می شود. کاراکترهای غیر حروف الفبا بدون تغییر باقی می مانند.

toupper ( str )

یک کپی از رشته str را باز می کند ، با تمام کاراکترهای حروف کوچک در رشته به همتای بزرگ خود مربوطه ترجمه می شود. کاراکترهای غیر حروف الفبا بدون تغییر باقی می مانند.

توابع زمان

از آنجایی که یکی از کاربردهای اولیه برنامه AWK پردازش پروندههای ورودی است که شامل اطلاعات زمانبندی تمبر هستند، gawk توابع زیر را برای به دست آوردن تمبرهای زمان و قالب بندی آنها فراهم می کند.

mktime ( datepec )

Rurns به یک مهر تایم از همان شکل که توسط systime () بازگردانده می شود. datepec یک رشته از فرم YYYY MM DD HH MM SS [DST] است . محتویات رشته شش یا هفت عدد به ترتیب شامل سال کامل شامل قرن، ماه از 1 تا 12، روز از ماه از 1 تا 31، ساعت از روز از 0 تا 23، دقیقه از 0 تا 59، و دوم از 0 تا 60، و پرچم صرفه جویی در اختیار روز انتخابی است. مقادیر این اعداد نباید در محدوده مشخص شده باشند به عنوان مثال یک ساعت از 1 به معنای یک ساعت قبل از نیمه شب است. تقویم مقدماتی-گرگوری صفر، با سال 0 قبل از سال 1 و سال -1 قبل از سال 0. فرض می شود زمان در منطقه زمانی محلی است. اگر پرچم صرفه جويي روزانه مثبت باشد، زمان به نظر مي رسد كه زمان صرفه جويي در تابستان باشد. اگر صفر باشد، زمان آن زمان استاندارد است؛ و اگر منفی (به طور پیش فرض)، mktime () تلاش می کند تا تعیین کند که آیا زمان صرفه جویی در نور روز در زمان مشخص شده است یا خیر. اگر datepec حاوی عناصر به اندازه کافی نیست و یا زمان نتیجه خارج از محدوده باشد، mktime () -1 را نشان می دهد.

strftime ( [ فرمت [ ، زمانبندی ]] )

تاریخچه قالب با توجه به مشخصات در فرمت. برچسب زمان باید همان شکل باشد که توسط systime () بازمی گردد . اگر برچسب زماني گم شده باشد، زمان فعلي روز استفاده مي شود. اگر فرمت از دست رفته باشد، یک فرمت پیشفرض معادل خروجی تاریخ (1) استفاده می شود. خصوصیات عملکرد تابع strftime () در ANSI C را برای تبدیل های قالب بندی که در دسترس هستند، مشاهده کنید. نسخه عمومي domain از strftime (3) و صفحه مردي براي آن با gawk آمده است. اگر این نسخه برای ساخت gawk مورد استفاده قرار گرفت، سپس تمام تبدیل هایی که در صفحه مرد مشخص شده اند برای gawk در دسترس هستند .

systime ()

زمان فعلی روز را به عنوان تعداد ثانیه از زمان اپوس (1970-01-01 00:00:00 UTC در سیستم POSIX) به دست می آورد.

توابع دستکاری بیت

شروع با نسخه 3.1 از gawk ، توابع دستکاری بیت زیر در دسترس هستند. آنها با تبدیل دو نقطه دقت شناور به اعداد صحیح طولی بدون علامت ، انجام عملیات، و سپس تبدیل نتیجه به نقطه شناور کار می کنند. توابع عبارتند از:

و ( v1 ، v2 )

بازگشت bitwise AND از مقادیر ارائه شده توسط v1 و v2 .

compl ( val )

مکمل bitwise از val را بازگردانید

lshift ( val ، count )

ارزش val را با مقدار بیت شمارش شده کنار بگذارید.

یا ( v1 ، v2 )

بازگشت bitwise OR از مقادیر ارائه شده توسط v1 و v2 .

rshift ( val ، count )

مقدار val را با مقدار بیت شمارش شده عوض کنید.

xor ( v1 ، v2 )

XOR bitwise از مقادیر ارائه شده توسط v1 و v2 را باز کنید .

توابع بین المللی

با شروع از نسخه 3.1 gawk ، از برنامه AWK شما برای ترجمه رشته ها در زمان اجرا از توابع زیر استفاده می شود. برای جزئیات کامل، به GAWK مراجعه کنید : برنامه نویسی AWK موثر .

bindtextdomain ( دایرکتوری [ ، دامنه ] )

دایرکتوری را مشخص می کند که gawk به دنبال فایل های .mo می باشد، در صورتی که آنها نمی توانند یا نمی توانند در مکان های استاندارد قرار گیرند (مثلا در حین آزمایش). این دایرکتوری را که دامنه "bound."

دامنه پیش فرض ارزش TEXTDOMAIN است . اگر دایرکتوری رشته null ( "" ) باشد، سپس bindtextdomain () اتصال فعلی را برای دامنه داده شده را برمی گرداند.

dcgettext ( رشته [ ، دامنه [ ، دسته ]] )

ترجمه رشته در دامنه دامنه متنی برای رده رده محلی. مقدار پیش فرض برای دامنه ارزش فعلی TEXTDOMAIN است . مقدار پیش فرض برای رده LC_MESSAGES است .

اگر مقدار را برای دسته بندی ارائه می کنید ، باید یک رشته برابر با یکی از دسته های محلی شناخته شده توصیف شده در GAWK باشد: برنامه نویسی AWK موثر . شما همچنین باید دامنه متن را ارائه دهید. اگر می خواهید از دامنه فعلی استفاده کنید، از TEXTDOMAIN استفاده کنید.

dcngettext ( string1 ، string2 ، number [ ، domain [ ، category ]] )

مقدار فراوانی که برای تعداد ترجمه از string1 و string2 در دامنه دامنه متن برای رده رده محلی استفاده می شود را می گیرد. مقدار پیش فرض برای دامنه ارزش فعلی TEXTDOMAIN است . مقدار پیش فرض برای رده LC_MESSAGES است .

اگر مقدار را برای دسته بندی ارائه می کنید ، باید یک رشته برابر با یکی از دسته های محلی شناخته شده توصیف شده در GAWK باشد: برنامه نویسی AWK موثر . شما همچنین باید دامنه متن را ارائه دهید. اگر می خواهید از دامنه فعلی استفاده کنید، از TEXTDOMAIN استفاده کنید.

کاربردهای تعریف شده

توابع در AWK به شرح زیر تعریف می شوند:

نام تابع ( لیست پارامترها ) { statements }

توابع وقتی اجرا می شوند که از عبارات داخل در هر دو الگو یا اعلان نامیده می شوند. پارامترهای واقعی ارائه شده در فراخوانی تابع برای نشان دادن پارامترهای رسمی اعلام شده در عملکرد استفاده می شوند. آرایه ها توسط مرجع منتقل می شوند، متغیرهای دیگر توسط مقدار منتقل می شوند.

از آنجاییکه توابع در اصل بخشی از زبان AWK نبودند، تنظیمات برای متغیرهای محلی خیلی راحت است: آنها به عنوان پارامترهای اضافی در لیست پارامتر اعلام شده است. این کنوانسیون جدا کردن متغیرهای محلی از پارامترهای واقعی با فضاهای اضافی در لیست پارامترها است. مثلا:

تابع f (p، q، a، b) # a و b محلی هستند {...} / abc / {...؛ f (1، 2)؛ ...}

پرانتز چپ در یک فراخوانی تابع نیاز به فورا از نام تابع پیروی می کند، بدون هیچ گونه فضای سفید مداخله ای. این برای جلوگیری از ابهام نحوی با اپراتور اتصال است. این محدودیت به توابع داخلی ساخته شده در بالا اعمال نمی شود.

توابع ممکن است به یکدیگر متصل شوند و ممکن است بازگشتی باشند. پارامترهای عملکردی که به عنوان متغیرهای محلی مورد استفاده قرار می گیرند به رشته صفر و عدد صفر بر اساس تابع فراخوانی می شوند.

از expr برای بازگشت به یک مقدار از یک تابع استفاده کنید. مقدار بازگشتی تعریف نشده است اگر مقدار ارائه نشده باشد یا اگر تابع با پایان دادن به "سقوط" باز گردد.

اگر - lint ارائه شده است، gawk در مورد تماس به توابع نامشخص در زمان تجزیه هشدار می دهد، به جای زمان اجرا. تماس با یک تابع undefined در زمان اجرا یک خطای مهلک است.

کلمه func ممکن است به جای عملکرد استفاده شود .

عملکرد جدیدی را به صورت عمودی بارگذاری می کند

شروع با نسخه 3.1 از gawk ، شما می توانید به طور پویا توابع داخلی جدید را به مترجم gawk در حال اجرا اضافه کنید. جزئیات کامل فراتر از محدوده این صفحه راهنما است؛ GAWK: برنامه نویسی AWK موثر برای جزئیات.

پسوند ( شی ، تابع )

فایل شیء به اشتراک گذاشته شده توسط شیء به طور پویا و تابع فراخوانی در آن شیء را برای انجام اولیه انجام می دهد. این ها هر دو به عنوان رشته ها ارائه می شود. مقدار بازگشتی عملکرد را می پردازد.

این تابع در GAWK ارائه شده و مستند شده است : برنامه نویسی AWK موثر ، اما همه چیز در مورد این ویژگی احتمالا در نسخه بعدی تغییر خواهد کرد. ما به شدت توصیه می کنیم که از این ویژگی برای هر چیزی که مایل نیستید مجددا استفاده نکنید.

سیگنالها

pgawk دو سیگنال را می پذیرد SIGUSR1 باعث می شود که پروکسی پروفایل و عملکردها را به فایل نمایه، که either awkprof.out است یا هر پرونده با گزینه --profile نامگذاری شده است، رها کنید. سپس به اجرا ادامه می دهد. SIGHUP باعث می شود آن را به پشته پروفایل و عملکرد تماس بگیرید و سپس خروج.

مثال ها

نام ورود به سیستم تمام کاربران را چاپ و مرتب کنید: BEGIN {FS = ":"} {print $ 1 | "مرتب سازی"} تعداد خط ها در یک فایل: {nlines ++} END {print nlines} قبل از هر سطر با عدد آن در فایل: {print FNR، $ 0} پیوند دادن و شماره خط (تغییر در یک موضوع): {print NR، $ 0}

داخلی سازی

ثابت های رشته ها توالی شخصیت های محاط در نقل قول های دوگانه هستند. در محیط های غیر انگلیسی زبان، می توان رشته ها را در برنامه AWK علامت گذاری کرد که نیاز به ترجمه به زبان طبیعی بومی دارند. چنین رشته ها در برنامه AWK با یک تاکید برجسته (`` _ '') مشخص شده است. مثلا،

gawk 'BEGIN {چاپ "سلام جهان"}'

همیشه سلام، جهان را چاپ می کند . ولی،

gawk 'BEGIN {print _ "hello، world"}'

ممکن است bonjour، monde در فرانسه چاپ کند

چندین مرحله در تولید و اجرای یک برنامه AWK قابل تنظیم وجود دارد.

1

یک عمل BEGIN را برای اختصاص یک مقدار به متغیر TEXTDOMAIN اضافه کنید تا دامنه متن را به یک نام مرتبط با برنامه شما تنظیم کنید.


BEGIN {TEXTDOMAIN = "myprog"}

این اجازه می دهد تا gawk فایل .mo مرتبط با برنامه شما را پیدا کند. بدون این گام، gawk از دامنه متن پیام استفاده می کند، که احتمالا شامل ترجمه هایی برای برنامه شما نمی شود.

2

علامت گذاری تمام رشته ها که باید با حروف برجسته ترجمه شود.

3

در صورت لزوم، در برنامه خود، به صورت مناسب، از دستورات dcgettext () و / یا bindtextdomain () استفاده کنید.

4

اجرای gawk --gen-po -f myprog.awk> myprog.po برای ایجاد یک فایل .po برای برنامه شما.

5

ارائه ترجمه مناسب و ساخت و نصب فایل مربوطه .mo .

ویژگی های بین المللی سازی در جزئیات GAWK: برنامه نویسی AWK موثر توضیح داده شده است.

سازگاری Posix

هدف اصلی gawk سازگاری با استاندارد POSIX و همچنین آخرین نسخه یونیکس awk است . برای این منظور، gawk شامل ویژگی های قابل مشاهده کاربر است که در کتاب AWK توصیف نشده اند، اما بخشی از نسخه Bell Laboratories awk هستند و در استاندارد POSIX قرار دارند.

این کتاب نشان می دهد که انتساب متغیر خط فرمان زمانی اتفاق می افتد که awk در غیر این صورت آرایه را به عنوان یک پرونده باز کند که بعد از بلوک BEGIN اجرا می شود. با این حال، در پیاده سازی های اولیه، زمانی که چنین تخصیصی قبل از هر نام فایل نمایش داده شد، تخصیص قبل از اجرای بلوک BEGIN اتفاق می افتد. برنامه های کاربردی به این "ویژگی" بستگی داشتند. "هنگامی که awk برای مطابقت با مستندات آن تغییر یافت، گزینه -v برای اختصاص متغیرها قبل از اجرای برنامه به برنامه های کاربردی وابسته به رفتار قدیمی بستگی داشت. (این ویژگی توسط هر دو آزمایشگاه Bell و توسعه دهندگان GNU توافق شده است.)

گزینه -W برای اجرای ویژگی های خاص از استاندارد POSIX است.

هنگام پردازش استدلال، gawk با استفاده از گزینه خاص `` - '' برای نشان دادن پایان استدلال ها. در حالت سازگاری، آن را هشدار می دهد اما در غیر این صورت نادیده گزینه های نامشخص. در عمل عادی، چنین استدلال ها به برنامه AWK منتقل می شود تا پردازش آن انجام شود.

کتاب AWK مقدار بازگشتی srand () را تعریف نمی کند. استاندارد POSIX آن را بازده بذری که از آن استفاده می کرد، اجازه می دهد پیگیری های توالی های تصادفی ردیابی را پیگیری کنید. بنابراین srand () در gawk نیز دانه فعلی خود را باز می کند.

سایر ویژگی های جدید عبارتند از: استفاده از گزینه های چندگانه (از MKS awk )؛ آرایه ENVIRON ؛ توالی های \ a ، و \ v فرار (انجام شده در اصل در gawk و دوباره به نسخه آزمایشگاه Bell)؛ عملکردهای ساخته شده در tolower () و toupper () از نسخه Bell Laboratories؛ و مشخصات تبدیل ANSI C در printf (انجام اولین بار در نسخه آزمایشگاه بل).

ویژگی های تاریخی

دو ویژگی از پیاده سازی AWK تاریخی که پشتیبانی gawk وجود دارد . اول، ممکن است که طول () ساخته شده است در عملکرد نه تنها بدون هیچ استدلال، اما حتی بدون پرانتز! بدین ترتیب،

a = طول # مقدس Algol 60، بتمن!

همانند هر دو است

a = طول ()
a = طول (0 دلار)

این ویژگی در استاندارد POSIX مشخص شده به عنوان `` نادیده گرفته شده '' است و gawk هشدار در مورد استفاده از آن اگر خطی در خط فرمان مشخص شود، هشدار می دهد.

ویژگی دیگر این است که استفاده از دستورات ادامه و یا شکست در خارج از بدن یک زمان ، برای ، یا انجام حلقه. پیاده سازی های AWK سنتی با استفاده از چنین معادلاتی با عبارات بعدی رفتار می کنند . Gawk این استفاده را پشتیبانی می کند اگر - سنتی مشخص شده باشد.

افزونههای گنو

Gawk دارای تعدادی پسوند برای awk POSIX است. آنها در این بخش شرح داده شده اند. تمام پسوندهایی که در اینجا توضیح داده شده است می توانند با فراخوانی gawk با گزینه های سنتی غیرفعال شوند .

ویژگی های زیر gawk در awk POSIX در دسترس نیستند.

*

جستجوی مسیر برای فایل های نامگذاری شده از طریق گزینه -f انجام نمی شود. بنابراین متغیر محدوده AWKPATH خاص نیست.

*

توالی فرار \ x . (معلول با --posix .)

*

عملکرد fflush () . (معلول با --posix .)

*

توانایی ادامه خطوط پس از ؟ و : (معلول با --posix .)

*

Octal و هگزادسیمال ثابت در برنامه AWK.

*

متغیرهای ARGIND ، BINMODE ، ERRNO ، LINT ، RT و TEXTDOMAIN خاص نیستند.

*

متغیر IGNORECASE و عوارض جانبی آن در دسترس نیست.

*

فیلد FIELDWIDTHS و تقسیم فیلد ثابت.

*

آرایه PROCINFO در دسترس نیست.

*

استفاده از RS به عنوان یک عبارت منظم

*

نام فایل های خاص موجود برای تغییر مسیر I / O قابل شناسایی نیست.

*

| & اپراتور برای ایجاد پروسه های همکاری

*

توانایی تقسیم کاراکترهای فرد با استفاده از رشته صفر به عنوان مقدار FS و به عنوان سومین استدلال برای تقسیم () .

*

استدلال اختیاری دوم به تابع close () .

*

استدلال اختیاری سوم به تابع match () .

*

توانایی استفاده از مشخصه های موقعیتی با printf و sprintf () .

*

استفاده از آرایه حذف برای حذف تمام محتویات یک آرایه.

*

استفاده از file next برای رها کردن پردازش فایل ورودی فعلی.

*

و () ، asort () ، bindtextdomain () ، compl () ، dcgettext () ، gensub () ، lshift () ، mktime () ، یا () ، rshift () ، strftime () ، strtonum () ، systime () و xor () عمل می کند.

*

رشته های محلی

*

اضافه کردن توابع ساخته شده در جدید به طور پویا با عملکرد extension () .

کتاب AWK مقدار بازگشتی تابع close () را تعریف نمی کند. Gawk 's close () مقدار را از fclose (3) یا pclose (3)، در صورت بسته شدن فایل خروجی یا لوله، به ترتیب، باز می گرداند. این وضعیت خروج فرآیند هنگام بستن یک لوله ورودی را باز می کند. مقدار بازگشتی -1 است اگر فایل، لوله یا پروسه نامگذاری شده با تغییر مسیر باز نشد.

هنگامی که gawk با گزینه ترجیحی فراخوانی می شود، اگر پارامتر fs به گزینه -F است `` t ''، سپس FS به کاراکتر برگه تنظیم می شود. توجه داشته باشید که typing gawk -F \ t ... به سادگی باعث می شود که پوسته به `` t، '' رفته و `` \ t '' را به گزینه -F منتقل کند. از آنجا که این یک مورد ویژه زشت است، این رفتار پیش فرض نیست. این رفتار نیز رخ نمی دهد اگر --posix مشخص شده است. برای اینکه شخصیت تب را به عنوان جداساز فیلد بدست آورید بهتر است از نقل قول ها استفاده کنید: gawk -F '\ t' ....

دستورات دیگر را مشاهده کنید : wait ، lp ، complete ، execv ، getfacl ، ioctl ، uniq ، rmmod ، pvcreate ، rsh ، unix2dos ، cal ، fs ، cd ، iwpriv ، swapon ، autofs ، talk ، motd ، free ، lpr ، execl ، fdisk ، در ، که ، iwconfig ، ifconfig ، vgdisplay ، باز ، lsmod ، ntohs ، mailq ، kill ، wtmp