1.   مشاوره و انجام پروپوزال  و پایان نامه ، مشاوره در زمینه ارائه سمینار، 
       مشاوره و انجام مقاله های بین المللی و داخلی، 
       مشاوره و انجام مقاله در مجله های علمی پژوهشی معتبر، 
        مشاوره و آموزش شبیه سازی شبکه توسط شبیه ساز آکادمیک 2-NS، 
         مشاوره و آموزش شبیه سازهای ترافیک شهری از قبیل  SUMO، ONE، و ...
          کمک به دانشجویان برای پیاده سازی ایده ها و مقالات خود با شبیه سازهای
               NS2, NS3 , OMNET++ , ONE
     
    
                 شماره تماس :
                         حسین رنجبران:    09101607834   
                                          
    
                  ساعات تماس: 
                                      ۸ الی ۲۰
                         
                   ایمیل:
                         hossein.ranjbaran.it@gmail.com
                        
           
    

توابع در awk (قسمت اول)

شروع موضوع توسط AdMiN ‏8/1/14 در انجمن برنامه نویسی AWK

وضعیت موضوع:
You must be a logged-in, registered member of this site to view further posts in this thread.
  1. AdMiN

    AdMiN Administrator هیات مدیره


    تــوابع در awk به دو دسته کلی تقسیم می‌شـــونــد. تــوابـــع درونی (Builtin) و تـــوابـــع تعـــریــف شـــده تـوسط کاربر (UserDefined). تــوابــع درونـــی خـــود به سه دسته اصلی عددی (numeric)، رشته (string) و ورودی/خروجی (I/O) تقسیم می‌شــوند. هــمـــواره می‌توانید از توابع درونی در برنامه‌های awk خود استفاده کنید.

    فراخوانی توابع درونی

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

    (atan2(y+z, 1

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

    توابع عددی
    در این قسمت با تعدادی از توابع درونی عددی آشنا خواهید شد. آرگومان‌های اختیاری درون براکت نمایش داده شده‌اند.

    (int(X

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

    int(3) =3, int(3.9) = 3, int(-3.9) = -3, int(-3) = -3

    (sqrt(X
    این تابع مجزور X را باز خواهد گرداند. برای مثال:

    sqrt(4) = 2

    (exp(X

    این تابع نمای X را باز خواهد گرداند. در صورتی کـــه X خـارج از محدوده باشد، یک پیغام خطا چاپ خواهد کرد. محدوده X بستگی به پردازنده سیستم شما دارد.

    (log(X

    این تابع لگاریتم X را در صورتی که X مثبت باشد، باز خواهد گرداند. در غیر اینصورت، پیغام خطایی چاپ می‌شود.

    (sin(X

    این تابع سینوس زاویه X را باز خواهد گرداند.

    (cos(X

    این تابع کسینوس زاویه X را باز خواهد گرداند.

    (atan2(y,x

    این تابع آرکتانژانت زاویه y به x را باز خواهد گرداند.

    ()rand

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

    upload_2014-1-8_15-51-58.png
    تابع بالا اعداد صحیح بین صفر و n-1 را بر خواهد گرداند.

    upload_2014-1-8_15-52-36.png

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

    توابع رشته‌ای

    توابع این بخش بــرای انجــام عملیات پردازشی بــر روی متـــون بـــه کـار می‌روند. بخش‌هایی که در براکت ([]) قرار داده شده‌اند، انتخابی می‌باشند. در این بخش برخی از مهمترین این نوع توابع را با هم مرور خواهیم کرد.

    upload_2014-1-8_15-51-58.png
    این تابع محتویات آرایه را مرتب (sort) کرده و اندیس‌های آرایه را نیز با مقادیر عددی جایگزین می‌نماید. در صورتی که آرگومان دوم dest ارسال شود، تغییرات بر روی آن آرایه اعمال خواهد شد و آرایه source بدون تغییر باقی خواهد ماند. برای مثال، آرایه زیر را در نظر بگیرید که تابع asort بر روی آن اعمال شده است:

    upload_2014-1-8_15-52-36.png

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

    (index(in, find)
    این تابع در رشته in برای وجود find جستجو کرده و شماره کاراکتر نخستین محل یافت شدن آنرا بر می‌گرداند. به مثال زیر توجه کنید:

    upload_2014-1-8_15-54-3.png

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

    ([length([string

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

    $ awk 'BEGIN { print length(35 * 15) }'3

    از آنـجــایی کـه حاصــل ضـــرب ۱۵ در ۳۵ بـرابر است با ۵۲۵ و عدد ۵۲۵ یک عدد سه رقمی است، در خروجی، عدد سه برگردانده شده است.

    ([match(string,regexp [, array

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

    ([split(string,array [, fieldsep

    این تـــابع متــن ورودی را بــه بخــش‌های جدا شــده تـوسط fieldsep تقسیم کرده و این بخش‌ها را در آرایه array ذخیره می‌کند. نخستــین قطعه در array با اندیس یک، دومین قطعه در array با اندیس دو و به همین ترتیب ذخیره می‌شوند. برای مثال:

    upload_2014-1-8_15-56-58.png
    همانطور که می‌بینید، رشتهcul-de-sac با واسطه کاراکتر جدا کننده – به سه بخش تقسیم می‌شود:

    upload_2014-1-8_15-57-55.png


    (strtonum (str
    این تابع رشته str را بررسی کرده و مقدار عددی آنــرا بر می‌گرداند. در صورتی که رشته با عدد صفر شروع شود، تابع فرض می‌کند که با یک عــدد اکــتــال طـــرف اســت و در صــورتی کــه رشتــه بـا 0x یا 0X شروع شود، رشته را یک عدد هگزادسیمال فرض خواهد کرد. برای مثال:

    upload_2014-1-8_16-1-57.png

    ادامه توابع رشته‌ای


    ([sub(regexp,replacement [, target

    این تابع مقدار target را تغییر می‌دهد به این نحو که به دنبال چپ‌ترین و بلندترین زیر رشته منطبق بر regexp جستجو کرده و آنرا با replacement جایگزین می‌نماید و مقدار جدید، به عنوان مقدار رشته target قرار داده می‌شود. مقدار regexp می‌تواند یک Regular Expression به شکل `/..../` یا یک رشته معمولی به شکل "....” باشد. برای مثال رشته str را در نظر بگیرید:

    upload_2014-1-8_16-2-35.png

    مقدار جدید strپس از قرارگیری در تابع subبرابر خواهد بود با:

    wither, water, everywhere

    در صــورتی کــه در متــن رشته کـاراکتر & قرار داده شود، مقدار replacement جایگزین & خواهد شد. برای روشن شدن مطلب، به مثال زیر توجه کنید:


    upload_2014-1-8_16-5-45.png
    برای اینکه اثــر اعمـــالی بـــر روی کـــاراکتر & را غیر فعال کنید، باید هنگام درج & در متن، از کاراکترهای &\\ بجای آن استفاده کنید. در صورتی که targetمشخص نشده باشد، ورودی از 0$ خوانده خواهد شد.

     

    فایل های ضمیمه:

وضعیت موضوع:
You must be a logged-in, registered member of this site to view further posts in this thread.

این صفحه را به اشتراک بگذارید