ورود/ایجاد حساب کاربری
   منوی اصلی
· خانه
· لیست کاربران
· جستجو
· آمار مشاهدات
· آرشیو مقالات


- شرح
· راهنمای نویسندگان
· درباره ما

   همکاری با نشریه
در صورتی که مایل به همکاری با نشریه هستید، می‌توانید در لیست پستی نشریه عضو شده و در جریان امور قرار گیرید. برای اطلاعات بیشتر، اینجا کلیک کنید.

   کاربران
سردبیر
هیچ مدیر کمکی حاضر
همکاران
هیچ مدیر کمکی حاضر
اعضا:
جدیدترین:جدید امروز:0
جدیدترین:جدید دیروز:0
جدیدترین:مجموع:2471
جدیدترین:جدیدترین:
ufumenarayu
اعضا:حاضر
اعضا:اعضا:0
مهمان‌ها:مهمان‌ها:3
مجموع:مجموع:3
کاربران حاضر
هیچ کاربر حاضری وجود ندارد

   ورود کاربران




 


 برای ورود مشکل دارید؟
 ثبت نام کاربران جدید

آشنایی با awk بخش هشتم

(516 مجموع کلمات موجود در متن)
(4754 بار مطالعه شده است)  نسخه چاپی

آشنایی با awk بخش هشتم

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

تعریف توابع سفارشی
تعریف توابع سفارشی می‌تواند در هر جایی از متن یک برنامه awk صورت گیرد. نیازی نیست تا تابع را پیش از جایی که آنرا فراخوانی می‌کنید، تعریف کنیـد. دلیـل ایــن امــر ایــن اسـت کــه awk پیـش از اجــرای برنـامـه، تمامی متن برنامه را می‌خواند.

تعریف یک تابع سفارشی به صورت زیر است:

function <VAR>name</VAR>(<VAR>parameter-list</VAR>)
{ <VAR> body-of-function
</VAR>}

name مشخص کننده نام تابع تعریف شده است. شیوه نامگذاری توابع مشابه نامگذاری متغییرهاست: ترکیبی از حروف و اعداد که بین آنها می‌تواند کاراکتر زیر خط قرار داشته باشد. نام تابع نمی‌تواند با عدد شروع شود. در درون یک برنامه awk، از یک نام تکراری فقط می‌تواند در یک تابع، آرایه یا متغییر استفاده کرد. به این معنی که نمی‌توانید یک تابع یا متغییر یا آرایه همنام داشته باشید. parameter-list لیستی از آرگومان‌هایی است که تابع می‌پذیرد. این آرگومان‌ها باید با استفاده از کاما از هم جدا شوند. امکان داشتن دو آرگومان همنام یا داشتن آرگومان همنام با نام تابع وجود ندارد. body-of-function یا بدنه تابع حاوی دستورات زبان awk می‌باشد.کار اصلی تابع در این بخش انجام می‌شود. در استاندارد POSIX، تعریف یک تابع تنها با استفاده از کلمه کلیدی function صورت می‌گیرد. تقریبا تمامی انواع awk از این کلمه کلیدی پشتیبانی می‌کنند. بنابراین در صورتی که دوست دارید برنامه‌ای سازگار (portable) بسازید، از این کلمه کلیدی برای تعــریف تابــع استــفاده کنید. برخــی از انواع awk از کلـمه کلیدی func نیز برای تعریف تابع پشتیبانی می‌کنند.

مثال‌هایی از توابع سفارشی
در زیر مثالهایی از توابع سفارشی خواهید دید. مثال نخست تابعی است با نام myprint که یک عدد را به عنوان آرگومان دریافت کرده و با فرمت خاصی چاپ می‌کند:

function myprint(num)
{
printf "%6.3g\n", num
}

در صورتی که فایلی به نام nums حاوی خطوط زیر داشته باشید:

1.2   3.4    5.6   7.8
9.10 11.12 -13.14 15.16
17.18 19.20  21.22 23.24

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

#!/usr/bin/awk -f
function myprint(num)
{
printf "%6.3g\n", num
}
{
if($3 > 0){
myprint($3)
}
}

و آنرا با استفاده از دستور زیر اجرا کنید، خروجی مانند خروجی زیر بر روی صفحه نمایش مشاهده خواهید کرد:

$ cat nums | ./myprint.awk
5.6
21.2

برنامه ستون سوم فایل را خوانده، عدد منفی را در نظر نگرفته و سپس اعداد باقیمانده را مطابق تابع myprint فرمت کرده و بر روی خروجی چاپ می‌کند. مثال دوم تابعی است که تمامی المان‌های یک آرایه را پاک می‌کند:

function delarray(a,    i)
{
for (i in a)
delete a[i]
}

همانطور که می‌بینید، این تابع دو آرگومان دریافت کرده و عملیات خود را انجام می‌دهد. البته دستور delete قابلیت پاک کردن تمامی المان‌های یک آرایـه را نیـز داراسـت، ولـی استـفاده از آن بــه منظور پاک کردن آرایه، در برخی از انواع awk امکانپذیر نیست. به همین دلیل، در صورتی که قابلیت Portable بودن برنامه‌تان برای شما مهم است، توصیه می‌شود تا به این شکل از این تابع استفاده نکنید.

ترجمه و اضافات: آلن باغومیان alan@technotux.com
منبع: http://linuxgazette.net/issue67/nazario.html ، GNU/Awk User's Guide

PDF Version

تمامی مطالب و مقالات این سایت تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد.