محتوای حذف‌شده محتوای افزوده‌شده
LetsDoItBot (بحث | مشارکت‌ها)
تمیزکاری، + ویرایش با ماژول ابرابزار با استفاده از AWB
FreshmanBot (بحث | مشارکت‌ها)
جز اصلاح فاصله مجازی + اصلاح نویسه با استفاده از AWB
خط ۱۵:
}}
{{کاربردهای دیگر}}
'''AWK''' یک [[زبان برنامه‌نویسی مفسری]] است که برای [[پردازش متن]] طراحی شده و عموماً به عنوان ابزاری برای گزارش‌گیری و استخراج داده‌ها مورد استفاده قرار می‌گیرد. این زبان برنامه‌نویسی، تبدیل به یکی از ویژگی‌های استاندارد در سیستم‌عامل‌های خانواده [[یونیکس]] شده استشده‌است.
 
زبان AWK در دهه ۱۹۷۰ در ''[[آزمایش‌گاه‌های بل]] طراحی شد. نام این زبان از نام خانوادگی طراحان آن Alfred Aho, Peter Weinberger, و Brian Kernighan گرفته شده استشده‌است. سرواژه AWK در زبان انگلیسی، عمدتاً مشابه نام پرنده auk تلفظ می‌شود، که تصویری از این پرنده بر روی جلد کتاب [[زبان برنامه‌نویسی AWK (کتاب)|زبان برنامه‌نویسی AWK]]'' استفاده شده است، هرچند که AWK به صورت مجزا و حرف‌به‌حرف هم تلفظ می‌شود.
 
زبان برنامه‌نویسی AWK یک زبان اسکریپتی [[داده‌محور]] است؛ این زبان عموماً از یکسری دوجفتی ''الگو'' (pattern) و ''عمل'' (action) تشکیل می‌شود که قرار است بر روی یکسری داده‌های متنی اجرا شود؛ که این داده‌های متنی یا از فایل‌های عادی خوانده می‌شوند، یا اینکه از طریق [[لوله‌بندی (یونیکس)|خط لوله]] بدست می‌آیند. به کمک AWK می‌توان اطلاعاتی را از این داده‌های متنی استخراج کرد یا اینکه گزارش‌هایی قالب‌بندی‌شده از آنهاآن‌ها تهیه کرد. این زبان به طوربه‌طور گسترده‌ای از نوع‌داده string (رشته)، [[آرایه انجمنی|آرایه‌های انجمنی]] (آرایه‌ای که با کلیدرشته اندیس‌گزاری می‌شود) و [[عبارات باقاعده]] استفاده می‌کند. در حالی که دامنه استفاده محدودی برای زبان AWK در نظر گرفته شده، و این زبان خصوصاً برای نوشتن برنامه‌های یک‌خطی طراحی شده، AWK یک زبان Turing-complete است و حتی کاربران اولیه AWK در آزمایش‌گاه‌های بل نیز برنامه‌های بزرگ با ساختاربندی خوب به زبان AWK می‌نوشتند.
 
== تاریخچه ==
زبان برنامه‌نویسی AWK در ابتدا در سال ۱۹۷۷ توسط Alfred Aho, Peter Weinberger, و Brian Kernighan ساخته شد. نام این زبان از حرف اول نام خانوادگی تولیدکنندگانش گرفته شده استشده‌است. امروزه AWK یکی از ابزارهای الزامی در استاندارد Single UNIX Specification است و استاندارد Linux Standard Base هم آن را الزامی کرده استکرده‌است.
 
زبان AWK در طی سال‌های ۱۹۸۵–۱۹۸۸ به طوربه‌طور گسترده‌ای گسترش یافت و نتیجهٔ این گسترش پیاده‌سازی GNU AWK بود که توسط Paul Rubin, Jay Fenlason, و Richard Stallman نوشته‌شده بود و در سال ۱۹۸۸ منتشر شد. کدهای منبع nawk که توسط برایان کرنیگان نوشته شده بود، در ابتدا در سال ۱۹۹۳ به صورت غیرعمومی و سپس در اواخر دهه ۱۹۹۰ به صورت عمومی منتشر شد. بسیاری از سیستم‌های BSD برای پرهیز از مجوز GPL از این پیاده‌سازی استفاده می‌کنند.
 
زبان AWK پس از دستور sed (سال ۱۹۷۴) درست شد. هر دو این ابزارها برای پردازش متن درست شده‌اند. هر دو آنهاآن‌ها پارادیم داده‌محور و خط‌گرا دارند و عموماً برای نوشتن برنامه‌های یک‌خطی مناسب هستند. قدرت و ایجازی که برنامه‌های AWK داشتند، خصوصاً قدرت آن در اداره‌کردن عبارات باقاعده و عدم نیاز به تعریف صریح متغیرها -- که نوشتن برنامه‌های یک‌خطی را تسهیل می‌کرد-- در کنار محدودیت‌هایی که AWK در آن زمان‌ها داشت، از جمله مهمترین دلایلی بودند که الهام‌دهندهٔ [[لری وال]] برای ساخت زبان برنامه‌نویسی پرل (۱۹۸۷) شدند. در دهه ۱۹۹۰، پرل بسیار محبوب شد، و در زمره زبان‌های پردازش متن، از جمله رقیبان AWK بود.
 
== ساختار برنامه‌های AWK ==
خط ۳۷:
</source>
 
که در کد بالا، بخش condition یک عبارت است و بخش action هم دنباله‌ای از دستورها است. فایل ورودی به یکسری رکورد شکسته می‌شود. به طوربه‌طور پیشفرض، رکوردها با استفاده از کاراکتر newline از هم مجزا می‌شوند، بنابراین، فایل ورودی بر اساس خطوط موجود در آن تقسیم‌بندی می‌شود. برنامه به نوبت هر عبارتی که در بخش condition نوشته شده را بر روی رکورد فعلی آزمایش می‌کند، در صورتی که هر کدام از آن عبارات با رکورد فعلی تطابق داشت، بخش action مربوط به آن عبارت اجرا می‌شود. یکی از بخش‌های condition یا action را می‌توان ننوشت، اما حداقل یکی از آنهاآن‌ها باید نوشته شود. رفتار پیشفرض برای conditionای که نوشته نشده این است که فرض می‌شود آن condition با تمام خطوط تطابق دارد. در صورتی که از نوشتن بخش action صرف نظر شود، به صورت پیشفرض این طوراین‌طور تصور می‌شود که قصد برنامه‌نویس چاپ کردن رکورد فعلی بوده استبوده‌است.
 
بخش condition علاوه بر اینکه می‌تواند شامل عبارت‌های ساده‌ای همچون foo == ۱ یا /^foo/ باشد، می‌تواند کلمات مخصوصی همچون BEGIN یا END هم باشد. در مورد BEGIN، بخش action متناظر پیش از خوانده‌شدن اولین رکورد اجرا می‌شود، و در مورد END، بخش action متناظر، پس از خوانده‌شدن آخرین رکورد اجرا می‌شود. بخش condition همچنین می‌تواند به صورت pattern1, pattern2 باشد که در این صورت، بخش action متناظر بر روی محدوده‌ای از خطوط اجرا می‌شود که شروع این محدوده اولین خطی است که حاوی pattern1 است و پایان این محدوده هم خطی است که حاوی pattern2 است.
 
عبارات AWK علاوه بر اینکه می‌توانند حاوی عملگرهای منطقی و محاسباتی عادی باشند، می‌توانند حاوی عملگر تیلد tilde هم باشند (~) که این عملگر، یک عبارت باقاعده را بر روی یک رشته آزمایش می‌کند. به جای استفاده از این عملگر همچنین می‌توان از سینتکس /regexp/ استفاده کرد. این سینتکس از sed گرفته شده استشده‌است که sed هم آنرا از ویرایشگر ed گرفته استگرفته‌است که در این ویرایشگر از کاراکتر / برای جستجو استفاده می‌شود.
 
== منابع ==
برگرفته از «https://fa.wikipedia.org/wiki/AWK»