در بخش های قبل از سری پست های ابزار AWK مابیشتر روی خواندن ورودی از یک فایل تمرکز کردیم. اما اگر شما بخواهید ورودی را از STDIN یا Standard Input چگونه خواهد بود.
در این بخش از سری مطالب AWK ما به چندین مثال خواهیم پرداخت به طوری که شما بتوانید خروجی دستورات دیگر را به جای خواندن ورودی از یک فایل فیلتر و استفاده کنیم.
ما با ابزار dir شروع میکنیم که همانند دستور ls کار میکند و همانطور که در مثال زیر میبینید ما خروجی دستور dir -l را به عنوان ورودی دستور awk استفاده میکنیم تا تنها username, groupname و فایل هایی که مربوط به انهاست و در دایرکتوری جاری میباشند را print بگیریم.
مثال دیگری هم در زیر آورده ایم که از عبارت های AWK استفاده شده و در این مثال میخواهیم فایل هایی که مالک آنها کاربر root هستند را با استفاده از یک عبارت برای فیلتر کردن string ها نمایش دهیم.
دستور بالا شامل عملگر مقایسه ای (==) میباشد که به ما کمک میکند که فایل های درون دایرکتوری جاری که مالکیت آنها با یوزر root میباشد را فیلتر کنیم. که با استفاده از عبارت $3==”root” صورت میگیرد.
اکنون به مثال دیگری میپردازیم که در آن از یک عملگر مقایسه ای AWK به منظور mach شدن با یک string خاص استفاده میشود.
در اینجا ما از ابزار cat برای نمایش محتوای یک فایل با نام linuxzone _deals.txt استفاده میکنیم و میخواهیم فقط محتوایی که Type آن Tech باشد را نمایش دهیم در نتیجه دستور زیر را اجرا میکنیم.
در مثال بالا ما از عملگر مقایسه ای با مقدار ~ /pattern/ استفاده کرده ایم اما در مثال بالا 2 کامند میبینید که نکته مهمی را خاطر نشان میکند.
زمانی که شما دستور را با الگوی tech اجرا میکنید هیچ چیزی نمایش داده نمیشود زیرا هیچ موردی با این type وجود ندارد ولی زمانی که از Tech استفاده میکنید خروجی دریافت میکنید.
در نتیجه همیشه به خاطر داشته باشید که این عملگر مقایسه ای به بزرگ و کوچک بودن حساس میباشد.(Case Sensitive)
به جای خواندن ورودی از یک فایل شما همیشه میتوانید خروجی یک دستور را با عنوان ورودی AWK استفاده کنید. و همانطور که در مثال های بالا مشاهده میکنید بسیار ساده هست.
امیدوارم مثال های بالا به اندازه کافی واضح باشند و شما آنها را به درستی درک کرده باشید. اگر هر گونه موردی بود شما میتوانید در همین پست آن را بیان کنید و فراموش نکنید که پارت بعدی از سری پست های مربوط به ابزار AWK را مشاهده کنید که درباره قابلیت های awk به عنوان variables, numeric expressions و assignment operators را مطالعه فرمایید.
در این بخش از سری مطالب AWK ما به چندین مثال خواهیم پرداخت به طوری که شما بتوانید خروجی دستورات دیگر را به جای خواندن ورودی از یک فایل فیلتر و استفاده کنیم.
ما با ابزار dir شروع میکنیم که همانند دستور ls کار میکند و همانطور که در مثال زیر میبینید ما خروجی دستور dir -l را به عنوان ورودی دستور awk استفاده میکنیم تا تنها username, groupname و فایل هایی که مربوط به انهاست و در دایرکتوری جاری میباشند را print بگیریم.
کد PHP:
# dir -l | awk '{print $3, $4, $9;}'
کد PHP:
root@asax:~# dir -l | awk '{print $3, $4, $9;}'
root root @
root root dahdi-linux-complete-current.tar.gz
root root Desktop
root root dhcpd.conf
root root Documents
root root Downloads
root root habili
root root habili.txt
root root Mail
root root mitesterforsip
root root Music
root root Pictures
root root postponed
root root Public
root root Templates
root root Videos
root@asax:~#
کد PHP:
# dir -l | awk '$3=="root" {print $1,$3,$4, $9;} '
کد PHP:
root@asax:~# dir -l | awk '$3=="root" {print $1,$3,$4, $9;} '
-rw-r--r-- root root @
-rw-r--r-- root root dahdi-linux-complete-current.tar.gz
drwxr-xr-x root root Desktop
-rw-r--r-- root root dhcpd.conf
drwxr-xr-x root root Documents
drwxr-xr-x root root Downloads
drwxr-xr-x root root habili
-rw-r--r-- root root habili.txt
drwx------ root root Mail
drwxr-xr-x root root mitesterforsip
drwxr-xr-x root root Music
drwxr-xr-x root root Pictures
-rw------- root root postponed
drwxr-xr-x root root Public
drwxr-xr-x root root Templates
drwxr-xr-x root root Videos
root@asax:~#
اکنون به مثال دیگری میپردازیم که در آن از یک عملگر مقایسه ای AWK به منظور mach شدن با یک string خاص استفاده میشود.
در اینجا ما از ابزار cat برای نمایش محتوای یک فایل با نام linuxzone _deals.txt استفاده میکنیم و میخواهیم فقط محتوایی که Type آن Tech باشد را نمایش دهیم در نتیجه دستور زیر را اجرا میکنیم.
کد PHP:
# cat tecmint_deals.txt
# cat tecmint_deals.txt | awk '$4 ~ /tech/{print}'
# cat tecmint_deals.txt | awk '$4 ~ /Tech/{print}'
کد PHP:
root@habili:~# cat linuzone_deals.txt
No Name Price Type
1 Mac_OS_X_Cleanup_Suite $9.99 Software
2 Basics_Notebook $14.99 Lifestyle
3 Tactical_Pen $25.99 Lifestyle
4 Scapple $19.00 Unknown
5 Nano_Tool_Pack $11.99 Unkown
6 Ditto_Bluetooth_Alerting_Device $33.00 Tech
7 Nano_Prowler_Mini_Drone $36.99 Tech
root@habili:~#
root@habili:~#
root@habili:~# cat linuzone_deals.txt | awk '$4 ~ /tech/{print}'
root@habili:~#
root@habili:~# cat linuzone_deals.txt | awk '$4 ~ /Tech/{print}'
6 Ditto_Bluetooth_Alerting_Device $33.00 Tech
7 Nano_Prowler_Mini_Drone $36.99 Tech
root@habili:~#
زمانی که شما دستور را با الگوی tech اجرا میکنید هیچ چیزی نمایش داده نمیشود زیرا هیچ موردی با این type وجود ندارد ولی زمانی که از Tech استفاده میکنید خروجی دریافت میکنید.
در نتیجه همیشه به خاطر داشته باشید که این عملگر مقایسه ای به بزرگ و کوچک بودن حساس میباشد.(Case Sensitive)
به جای خواندن ورودی از یک فایل شما همیشه میتوانید خروجی یک دستور را با عنوان ورودی AWK استفاده کنید. و همانطور که در مثال های بالا مشاهده میکنید بسیار ساده هست.
امیدوارم مثال های بالا به اندازه کافی واضح باشند و شما آنها را به درستی درک کرده باشید. اگر هر گونه موردی بود شما میتوانید در همین پست آن را بیان کنید و فراموش نکنید که پارت بعدی از سری پست های مربوط به ابزار AWK را مشاهده کنید که درباره قابلیت های awk به عنوان variables, numeric expressions و assignment operators را مطالعه فرمایید.