اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

آموزش نحوه استفاده از متغیرها، عبارات عددی و عملگرهای انتسابی در دستور awk بخش 8

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    آموزش نحوه استفاده از متغیرها، عبارات عددی و عملگرهای انتسابی در دستور awk بخش 8

    این پست هشتمین بخش از سری مقالات awk میباشد و به نظر من از اینجا به بعد دستورات هیجان انگیزتر میشوند. در هفت قسمت گذشته ما وارد مباحثی از awk شدیم که برای اجرای یکسری فیلترینگ های ابتدایی متن یا عبارت (string) در لینوکس شما باید در استفاده از این دستور حرفه ای باشید.

    با شروع این قسمت ما قصد داریم به مباحث پیشرفته ای در awk بپردازیم تا به توسط آن بتوانید عملیات پیشرفته فیلتر کردن متن یا string را انجام دهید، بنابراین ما قصد داریم که قابلیت های awk همانند متغیر ها (variables)، عبارت های عددی (numeric expressions) و عملگر های انتسابی (assignment operators) را پوشش دهیم.

    مباحثی که در این جا مطرح می شود با آنچه شما در زبان های برنامه نویسی دیگر مانند Shell ،C ،Python، و بسیاری از زبان های دیگر مواجه میشوید به صورت گسترده متفاوت و مجزا نیست پس تیتر این مطلب شما را نگران نکند، ما به صورت ساده ویژگی هایی را که در بالا گفتیم را توضیح خواهیم داد.

    این قسمت شاید یکی از آسانترین بخش های دستور awk باشد پس بشینید و ما را دنبال کنید :


    1 - متغیر های AWK

    در همه زبان های برنامه نویسی، یک متغیر (variable) جایی برای ذخیره کردن یک مقدار (value) است، زمانیکه شما یک متغیر در یک برنامه ایجاد میکنید، هنگامی که فایل را اجرا می کنید مقداری از فضا در حافظه کامپیوتر ایجاد شده و مقداری که شما برای متغیر در نظر گرفته اید را در آنجا ذخیره میشود.

    متغیر های awk را به شیوه ای یکسان همانند متغیر های Shell و به شکل زیر می توانید تعریف کنید.
    کد PHP:
    variable_name=value 
    در syntax بالا :

    variable_name : نامی است که شما به یک متغیر میدهید.
    value : مقداری است که در این متغیر ذخیره می شود.


    حال بیاید به مثال بعدی نگاهی بیندازیم :
    کد PHP:
    computer_name=”linux-zone.org”
    port_no
    =”22”
    email
    =”support@linux-zone.org”
    server
    =”computer_name” 
    با بررسی مثال ساده بالا در اولین تعریف متغیر، مقدار linux-zone.org به متغیر computer_name اختصاص یافته است.

    علاوه بر این، مقدار 22 به متغیر port_no اختصاص یافته است، همچنین می توانید مقدار یک متغیر را به یک متغیر دیگر اختصاص دهید مانند مثال آخر که مقدار متغیر computer_name را به متغیر server اختصاص داده شده است.

    اگر از قسمت دوم سری آموزش awk به یاد داشته باشید نحوه ویرایش field ها را پوشش داده ایم، و درباره اینکه چگونه دستور awk خطوط ورودی را درون field ها پخش می کند و از عملگر دسترسی به field استاندارد '$' که برای خواندن فیلد های متفاوت که به تازگی آنالیز شده اند، استفاده میشود بحث خواهیم کرد. همچنین می توانیم از متغیر ها برای ذخیره مقادیر field ها به صورتت زیر استفاده کنیم :
    کد PHP:
    first_name=$2
    second_name
    =$
    در مثال بالا مقدار متغیر first_name در فیلد دوم و مقدار متغیر second_name در فیلد سوم تعریف می شود .

    برای روشن تر شدن مطلب، یک فایل به نام linuxzone.txt را در نظر بگیرید که شامل لیستی از کاربران یک نرم افزار است که دارای نام، نام خانوادگی و جنسیت است. با استفاده از دستور cat میتوانید محتویات این فایل را همانند زیر مشاهده کنیم.
    کد PHP:
    cat names.txt 


    همچنین می توانیم با استفاده از متغیرهای first_name و second_name نام و نام خانوادگی اولین کاربر در این لیست را با استفاده از کامند awk ذخیره کنیم :
    کد PHP:
    parham@parham:~$ awk '/Mohammad/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' linuxzone.txt parham@parham:~$ 
    کد PHP:
     parham@parham:~$ awk '/Mohammad/{ first_name=$2 ; second_name=$3 ; print first_name, second_name ; }' linuxzone.txt
    Mohammad Habili
    parham
    @parham:~$ 
    حال بیایید یک مورد دیگر را بررسی کنیم، وقتی شما دستور uname –a را در ترمینال خود اجرا می کنید، برای شما مشخصات کامل سیستم نمایش داده می شود.

    فیلد دوم شامل hostname شماست، بنابراین می توانیم hostname را در یک متغیر به نام hostname ذخیره کنیم و آن را با awk همانند زیر نمایش دهیم :
    کد PHP:
    parham@parham:~$ uname -a
    Linux parham 4.4.0
    -66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    parham@parham:~$
    parham@parham:~$ uname -awk '{hostname=$2 ; print hostname ; }'
    parham
    parham
    @parham:~$ 


    2- عبارت های عددی (Numeric Expressions)

    در Awk عبارت های عددی با استفاده از عملگرهای عددی زیر ساخته شده اند.
    * : multiplication operator ( عملگر ضرب )
    + : addition operator ( عملگر جمع )
    / : division operator ( عملگر تقسیم )
    - : subtraction operator ( عملگر تفریق )
    % : modulus operator ( عملگر قدرمطلق )
    ^ : exponentiation operator ( عملگر توان )

    نحوه استفاده از Expression های عددی به صورت زیر است :
    کد PHP:
    operand1 operator operand2 
    در شکل بالا operand1 و operand2 می توانند یک عدد یا نام یک متغیر باشند و operator می تواند یکی از عملگر های بالا باشد.

    در زیر مثالی برای نشان دادن نحوه ساخت عبارات عددی آورده شده است :
    کد PHP:
    counter=0
    num1
    =5
    num2
    =10
    num3
    =num2-num1
    counter
    =counter+
    برای درک عبارات عددی در awk مثال زیر را در نظر میگیریم با فایلی به نام domains.txt که شامل همه ی دامین های مربوط به linux-zone.org می باشد :
    کد PHP:
    news.linux-zone.org
    linux
    -zone.org
    digium
    .ir
    windows
    .linux-zone.org
    linux
    -zone.org
    news
    .linux-zone.org
    linux
    -zone.org
    digium
    .ir
    linux
    -zone.org
    news
    .linux-zone.org
    linux
    -zone.org
    digium
    .ir
    windows
    .linux-zone.org
    linux
    -zone.org 
    برای مشاهده محتویات فایل از دستور زیر استفاده کنید :
    کد PHP:
    cat domains.txt 


    اگر بخواهیم تعداد دفعاتی که دامین linux-zone.org در فایل وجود دارد را بشماریم می توانیم اسکریپت ساده ی زیر را بنویسیم :
    کد PHP:
    #!/bin/bash
    for file in $@; do
            if [ -
    f $file ] ; then
                    
    #print out filename
                    
    echo "File is: $file"
                    
    #print a number incrementally for every line containing linux-zone.org
                    
    awk  '/^linux-zone.org/ { counter=counter+1 ; printf "%s\n", counter ; }'   $file
            
    else
                    
    #print error info incase input is not a file
                    
    echo "$file is not a file, please specify a file." >&&& exit 1
            fi
    done
    #terminate script with exit code 0 in case of successful execution
    exit 
    بعد از ایجاد اسکریپت آنرا ذخیره کرده و به فایل اسکریپت پرمیژن اجرایی بدهید، وقتی که این اسکریپت را با فایل domains.txt اجرا می کنیم، خروجی زیر نمایش داده می شود :
    کد PHP:
    $ ./script.sh  ~/domains.txt 


    در خروجی این اسکریپت 6 خط در فایل domains.txt وجود دارد که شامل linux-zone.org است، برای بررسی صحت عملکرد می توانید خطوط را به صورت دستی بشمارید.



    3 - عملگر های انتساب (assignment operators)

    آخرین ویژگی awk که به آن میپردازیم عملگرهای انتساب است، چندین عملگر از این نوع در awk وجود دارد که شامل لیست زیر است :
    *= : multiplication assignment operator ( عملگر ضرب )
    += : addition assignment operator ( عملگر جمع )
    /= : division assignment operator ( عملگر تقسیم )
    -= : subtraction assignment operator ( عملگر تفریق )
    %= : modulus assignment operator ( عملگر قدرمطلق )
    ^= : exponentiation assignment operator ( عملگر توان )

    ساده ترین ساختار عملیات انتسابی (assignment operation) در Awk به این صورت است :
    کد PHP:
    variable_name=variable_name operator operand 

    مثال :

    کد PHP:
    counter=0
    counter
    =counter+1

    num
    =20
    num
    =num-
    شما می توانید از عمگرهای انتسابی بالا بمنظور کوتاه کردن عملیات assignment استفاده کنید، مثال قبل را در نظر بگیرید، می توانید عملیات را شبیه به فرم زیر انجام دهید :
    کد PHP:
    variable_name operator=operand 
    کد PHP:
    counter=0
    counter
    +=1

    num
    =20
    num
    -=
    بنابراین می توانیم دستور Awk را در Shell Script ی که در بالا نوشتیم با استفاده از عملگر += همانند زیر تغییر دهیم :
    کد PHP:
    #!/bin/bash
    for file in $@; do        
           if [ -
    f $file ] ; then
                    
    #print out filename
                    
    echo "File is: $file"
                    
    #print a number incrementally for every line containing linux-zone.org
                    
    awk  '/^linux-zone.org/ { counter+=1 ; printf  "%s\n",  counter ; }'   $file
            
    else
                    
    #print error info incase input is not a file
                    
    echo "$file is not a file, please specify a file." >&&& exit 1
            fi
    done
    #terminate script with exit code 0 in case of successful execution
    exit 
    در این بخش از سری آموزش های دستور AWK، بعضی از ویژگی های قدرتمند Awk که شامل متغیر ها، ساخت Expression های عددی و نحوه استفاده از عملگرهای انتسابی است را به همراه نحوه استفاده از آنها را شرح دادیم.

    این مفاهیم با آنچه در زبان های برنامه نویسی استفاده می شود متفاوت نیست اما ممکن است یک سری تفاوتهای ناچیزی در برنامه نویسی Awk وجود داشته باشد.

    در بخش 9 از این سری مقالات درباره ی قابلیتهای بیشتر دستور awk که الگوهای خاص BEGIN و END هستند بحث خواهیم کرد. با ما همراه باشید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 02-09-2021, 10:23 AM.

درباره انجمن منطقه لینوکسی ها

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

شبکه های اجتماعی
در حال انجام ...
X