استفاده از دستور AWK به منظور سر و کله زدن با مقدارهای رشته ای یا عددی در یک خط از یک متن همچنین فیلتر کردن متن یا رشته های متنی با استفاده از عملگرهای مقایسه ای برای کاربران بسیار آسان میباشد.
در این پارت از سری پست های AWK ما درباره چگونگی فیلتر متن یا رشته های متنی با استفاده از عملگرهای مقایسه ای خواهیم آموخت. اگر شما یک برنامه نویس هستید قطعا با عملگرهای مقایسه ای آشنا هستید اما برای افرادی که آشنا نیستند ما در بخش زیر توضیحاتی خواهیم داد.
عملگرهای مقایسه ای در AWK چه هستند؟
عملگرهای مقایسه ای در awk به منظور مقایسه مقدار اعداد یا رشته ها استفاده میشوند و به شرح زیر میباشند.
< : بزرگتر از
> : کوچکتر از
<= : بزرگتر مساوی
>= : کوچکتر مساوی
== : مساوی
!= : نامساوی
some_value ~ / pattern/ : درست در صورت match شدن some_value با patern
some_value !~ / pattern/ : درست در صورت match نشدن some_value با patern
اکنون که عملگرهای مقایسه ای موجود در AWK را مشاهده کردید با استفاده از مثال درک بهتری از آنها خواهیم یافت.
در مثال زیر فایلی با نام food_list.txt داریم که یک لیست خرید برای آیتم های غذایی متفاوت است و من میخواهم که آیتم های غذایی که مقدار آنها کوچکتر یا مساوی 20 عدد باشد را با اضافه کردن ** به آخر هر خط متمایز و مشخص کنم.
ساختار کلی استفاده از عملگرهای مقایسه ای در AWK به شرح زیر میباشد.
برای دستیابی به هدف بالا باید دستور زیر را اجرا کرد :
در مثال بالا 2 مورد مهم اتفاق میوفتد :
عبارت اول ترکیب { action ; } و در حقیقت $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } خط های با تعداد کوچکتر یا مساوی 30 را print مینماید و در پایان هر خط ** اضافه میکند. مقدار quantity (تعداد) از طریق استفاده از متغییر فیلد $3 قابل دسترسی است.
عبارت دوم ترکیب { action ; } و در حقیقت $3 > 30 { print $0 ;} خط هایی را که مقدار آنها بزرگتر از 30 باشد را بدون هیچ تغییری نمایش میدهد.
یک نمونه مثال دیگر :
در این مثال خط هایی که مقدار آنها کوچکتر مساوی 20 باشد را نمایش میدهیم و در انتهای هر خط کلمه TRUE را اضافه میکنیم.
خلاصه :
این پست در حقیقت یک مقاله مقدماتی روی عملگرهای مقایسه ای در AWK هست، بنابراین شما نیاز دارید که آپشن های بیشتر دیگر را بررسی و دنبال کنید.
در صورتی که با هر گونه مشکل روبه رو شدید میتوانید در این بخش مطرح نمایید. خواندن مقاله پارت بعدی از سری مقالات awk را نیز فراموش نکنید، که شما را با عبارت های ترکیبی آشنا میکند.
در این پارت از سری پست های AWK ما درباره چگونگی فیلتر متن یا رشته های متنی با استفاده از عملگرهای مقایسه ای خواهیم آموخت. اگر شما یک برنامه نویس هستید قطعا با عملگرهای مقایسه ای آشنا هستید اما برای افرادی که آشنا نیستند ما در بخش زیر توضیحاتی خواهیم داد.
عملگرهای مقایسه ای در AWK چه هستند؟
عملگرهای مقایسه ای در awk به منظور مقایسه مقدار اعداد یا رشته ها استفاده میشوند و به شرح زیر میباشند.
< : بزرگتر از
> : کوچکتر از
<= : بزرگتر مساوی
>= : کوچکتر مساوی
== : مساوی
!= : نامساوی
some_value ~ / pattern/ : درست در صورت match شدن some_value با patern
some_value !~ / pattern/ : درست در صورت match نشدن some_value با patern
اکنون که عملگرهای مقایسه ای موجود در AWK را مشاهده کردید با استفاده از مثال درک بهتری از آنها خواهیم یافت.
در مثال زیر فایلی با نام food_list.txt داریم که یک لیست خرید برای آیتم های غذایی متفاوت است و من میخواهم که آیتم های غذایی که مقدار آنها کوچکتر یا مساوی 20 عدد باشد را با اضافه کردن ** به آخر هر خط متمایز و مشخص کنم.
کد PHP:
No Item_Name Quantity Price
1 Mangoes 45 $3.45
2 Apples 25 $2.45
3 Pineapples 5 $4.45
4 Tomatoes 25 $3.45
5 Onions 15 $1.45
6 Bananas 30 $3.45
کد PHP:
# expression { actions; }
کد PHP:
[mohammad@localhost ~]$ awk '$3 <= 30 { printf "%s\t%s\n", $0,"**" ; } $3 > 30 { print $0 ;}' food_list.txt
No Item_Name Quantity Price
1 Mangoes 45 $3.45
2 Apples 25 $2.45 **
3 Pineapples 5 $4.45 **
4 Tomatoes 25 $3.45 **
5 Onions 15 $1.45 **
6 Bananas 30 $3.45 **
[mohammad@localhost ~]$
عبارت اول ترکیب { action ; } و در حقیقت $3 <= 30 { printf “%s\t%s\n”, $0,”**” ; } خط های با تعداد کوچکتر یا مساوی 30 را print مینماید و در پایان هر خط ** اضافه میکند. مقدار quantity (تعداد) از طریق استفاده از متغییر فیلد $3 قابل دسترسی است.
عبارت دوم ترکیب { action ; } و در حقیقت $3 > 30 { print $0 ;} خط هایی را که مقدار آنها بزرگتر از 30 باشد را بدون هیچ تغییری نمایش میدهد.
یک نمونه مثال دیگر :
کد PHP:
[mohammad@localhost ~]$ awk '$3 <= 20 { printf "%s\t%s\n", $0,"TRUE" ; } $3 > 20 { print $0 ;} ' food_list.txt
No Item_Name Quantity Price
1 Mangoes 45 $3.45
2 Apples 25 $2.45
3 Pineapples 5 $4.45 TRUE
4 Tomatoes 25 $3.45
5 Onions 15 $1.45 TRUE
6 Bananas 30 $3.45
[mohammad@localhost ~]$
در این مثال خط هایی که مقدار آنها کوچکتر مساوی 20 باشد را نمایش میدهیم و در انتهای هر خط کلمه TRUE را اضافه میکنیم.
خلاصه :
این پست در حقیقت یک مقاله مقدماتی روی عملگرهای مقایسه ای در AWK هست، بنابراین شما نیاز دارید که آپشن های بیشتر دیگر را بررسی و دنبال کنید.
در صورتی که با هر گونه مشکل روبه رو شدید میتوانید در این بخش مطرح نمایید. خواندن مقاله پارت بعدی از سری مقالات awk را نیز فراموش نکنید، که شما را با عبارت های ترکیبی آشنا میکند.