اطلاعیه

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

نحوه استفاده از دستور "next" به همراه دستور AWK در Linux بخش 6

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

    نحوه استفاده از دستور "next" به همراه دستور AWK در Linux بخش 6

    در این بخش از سری پست های AWK به دستور next میپردازیم که باعث میشود دستور awk تمام الگوها و عبارات باقی مانده که شما میدهید را در نظر نگرفته و در عوض خط ورودی بعدی را بخواند.

    دستور next به شما کمک میکند تا از اجرا کردن آنچه که به نظر من هدر دادن وقت در یک مرحله است جلوگیری شود.

    برای درک چگونگی کارکردن این دستور اجازه دهید فایلی به نام food_list.txt که محتوایی همانند زیر دارد را بررسی کنیم.
    کد PHP:
    No      Item_Name               Price           Quantity
    1       Mangoes                 
    $3.45              5
    2       Apples                  
    $2.45              25
    3       Pineapples              
    $4.45              55
    4       Tomatoes                
    $3.45              25
    5       Onions                  
    $1.45              15
    6       Bananas                 
    $3.45              30 
    دستور زیر آیتم های غذایی که تعداد آنها کمتر یا مساوی 20 باشد را با یک علامت ستاره در پایان هر خط نمایش میدهد.
    کد PHP:
    [root@voipmonitor ~]# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; } $4 > 20 { print $0 ;} ' food_list.txt

    No      Item_Name               Price           Quantity
    1       Mangoes                 
    $3.45              5    *
    2       Apples                  $2.45              25
    3       Pineapples              
    $4.45              55
    4       Tomatoes                
    $3.45              25
    5       Onions                  
    $1.45              15   *
    6       Bananas                 $3.45              30
    [root@voipmonitor ~]
    دستور بالا در حقیقت همانند زیر عمل میکند :

    اولا چک میکند که آیا مقدار quantity در حقیقت فیلد 4 هر خط کوچک تر یا مساوی 20 باشد. و اگر آن مقدار با شرط ما همخوانی داشته باشد در حقیقت print میشود و به همراه یک علامت ستاره در پایان آن متمایز میگردد. که برای این مورد از عبارت اول $4 <= 20 استفاده میشود.

    دوما این دستور چک میکند که آیا فیلد چهارم هر خط بزرگتر از 20 باشد و اگر هر خطی با این شرط مطابقت داشته باشد نمایش داده میشود که برای این مورد از عبارت دوم $4 > 20 استفاده میشود.

    اما در اینجا یک مشکل وجود دارد زمانی که عبارت اول اجرا میشود در حقیقت خطی که ما میخواهیم به همراه علامت ستاره مشخص و پرینت شود (با استفاده از { printf "%s\t%s\n", $0,"**" ; }) و سپس در همان مرحله عبارت دوم هم چک میشود در حقیقت یک عامل هدر دهنده تایم به حساب میآید.

    در نتیجه نیازی به اجرا کردن عبارت دوم $4 > 20 بعد از عبارت اول نمیباشد که در حقیقت برای print کردن خط های مارک شده است.

    برای رفع این مشکل شما باید همانند زیر از دستور next استفاده کنید.
    کد PHP:
    [root@voipmonitor ~]# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*" ; next; } $4 > 20 { print $0 ;} ' food_list.txt

    No      Item_Name               Price           Quantity
    1       Mangoes                 
    $3.45              5    *
    2       Apples                  $2.45              25
    3       Pineapples              
    $4.45              55
    4       Tomatoes                
    $3.45              25
    5       Onions                  
    $1.45              15   *
    6       Bananas                 $3.45              30
    [root@voipmonitor ~]
    بعد از اینکه یک خط ورودی مجزا با استفاده از $4 <= 20 پرینت میشود در عبارت { printf "%s\t%s\n", $0,"*" ; next ; } دستور next قرار گرفته که در skip کردن عبارت دوم $4 > 20 { print $0 ;} کمک خواهد کرد در نتیجه مراحل اجرا به خط ورودی بعدی میرود بدون اینکه زمانی برای بررسی خط هایی که quantity آنها بزرگتر از 20 باشد هدر برود.

    دستور next در دستورات مرتبط با محتوای فایل و در مکان های مورد نیاز دیگر بسیار موثر، مفید و مهم میباشد و شما میتوانید همیشه از آن در سرعت بخشیدن به مراحل اجرایی یک اسکریپت استفاده کنید. در پارت بعدی از این سری پست ها درباره استفاده از standard input یا STDIN با عنوان ورودی AWK صحبت خواهیم کرد.

    امیدوارم این پست برای شما مفید باشد. و هر گونه دانش اضافه ای روی این موضوع داشتید باعث خوشحالیست که به این پست اضافه کنید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 07-14-2019, 02:39 PM.

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

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

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