در این بخش از سری پست های AWK به دستور next میپردازیم که باعث میشود دستور awk تمام الگوها و عبارات باقی مانده که شما میدهید را در نظر نگرفته و در عوض خط ورودی بعدی را بخواند.
دستور next به شما کمک میکند تا از اجرا کردن آنچه که به نظر من هدر دادن وقت در یک مرحله است جلوگیری شود.
برای درک چگونگی کارکردن این دستور اجازه دهید فایلی به نام food_list.txt که محتوایی همانند زیر دارد را بررسی کنیم.
دستور زیر آیتم های غذایی که تعداد آنها کمتر یا مساوی 20 باشد را با یک علامت ستاره در پایان هر خط نمایش میدهد.
دستور بالا در حقیقت همانند زیر عمل میکند :
اولا چک میکند که آیا مقدار quantity در حقیقت فیلد 4 هر خط کوچک تر یا مساوی 20 باشد. و اگر آن مقدار با شرط ما همخوانی داشته باشد در حقیقت print میشود و به همراه یک علامت ستاره در پایان آن متمایز میگردد. که برای این مورد از عبارت اول $4 <= 20 استفاده میشود.
دوما این دستور چک میکند که آیا فیلد چهارم هر خط بزرگتر از 20 باشد و اگر هر خطی با این شرط مطابقت داشته باشد نمایش داده میشود که برای این مورد از عبارت دوم $4 > 20 استفاده میشود.
اما در اینجا یک مشکل وجود دارد زمانی که عبارت اول اجرا میشود در حقیقت خطی که ما میخواهیم به همراه علامت ستاره مشخص و پرینت شود (با استفاده از { printf "%s\t%s\n", $0,"**" ; }) و سپس در همان مرحله عبارت دوم هم چک میشود در حقیقت یک عامل هدر دهنده تایم به حساب میآید.
در نتیجه نیازی به اجرا کردن عبارت دوم $4 > 20 بعد از عبارت اول نمیباشد که در حقیقت برای print کردن خط های مارک شده است.
برای رفع این مشکل شما باید همانند زیر از دستور next استفاده کنید.
بعد از اینکه یک خط ورودی مجزا با استفاده از $4 <= 20 پرینت میشود در عبارت { printf "%s\t%s\n", $0,"*" ; next ; } دستور next قرار گرفته که در skip کردن عبارت دوم $4 > 20 { print $0 ;} کمک خواهد کرد در نتیجه مراحل اجرا به خط ورودی بعدی میرود بدون اینکه زمانی برای بررسی خط هایی که quantity آنها بزرگتر از 20 باشد هدر برود.
دستور next در دستورات مرتبط با محتوای فایل و در مکان های مورد نیاز دیگر بسیار موثر، مفید و مهم میباشد و شما میتوانید همیشه از آن در سرعت بخشیدن به مراحل اجرایی یک اسکریپت استفاده کنید. در پارت بعدی از این سری پست ها درباره استفاده از standard input یا STDIN با عنوان ورودی 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
کد 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 ~]#
دستور next در دستورات مرتبط با محتوای فایل و در مکان های مورد نیاز دیگر بسیار موثر، مفید و مهم میباشد و شما میتوانید همیشه از آن در سرعت بخشیدن به مراحل اجرایی یک اسکریپت استفاده کنید. در پارت بعدی از این سری پست ها درباره استفاده از standard input یا STDIN با عنوان ورودی AWK صحبت خواهیم کرد.
امیدوارم این پست برای شما مفید باشد. و هر گونه دانش اضافه ای روی این موضوع داشتید باعث خوشحالیست که به این پست اضافه کنید.