آشنایی با awk بخش هفتم(561 مجموع کلمات موجود در متن) (4932 بار مطالعه شده است)  آشنایی
با awk
بخش
هفتم
توابع
ورودی و خروجی
close
(filename, [, how])
فایل
filename
را
برای عملیات ورودی و خــروجــی میبندد.
filename میتواند
دستور خط فرمانی باشد که به یک لوله (pipe)
هدایت
شده است.
fflush([filename])
بافر
خروجی مرتبط با filename
را
خالی میکند.
این
تابع توسط آزمایشگاههای بل در سال ۱۹۹۴
اضافه شده و بخش از استاندارد POSIX
نمیباشد.
system(command)
این
تابع دستورات سیستم عامــل را از درون
توابع awk
اجـــرا
میکند و خروجی بازگــردانده شــده
تــوســط دستـور را بر میگرداند.
به
مثال زیر توجه کنید:
$
echo | awk '{system("ls -l")}' total 420 -rw-r--r--
1 alan alan 1482 2005-12-13 06:48 20051212-fmt.html -rw-r--r--
1 alan alan 3008 2005-12-13 06:48 20051212.html -rw-r--r-- 1
alan alan 4058 2005-12-14 03:59 20051213-fmt.html -rw-r--r-- 1
alan alan 9920 2005-12-14 03:58 20051213.html -rw-r--r-- 1 alan
alan 3416 2005-12-17 00:52 20051216-fmt.html
روش
دیگری نیز برای اجرای دستورات سیستمعامل
از درون awk
وجود
دارد.
به
مثال زیر توجه کنید:
$
echo | awk '{print "ls -l" | "/bin/sh"}' total
420 -rw-r--r-- 1 alan alan 1482 2005-12-13 06:48
20051212-fmt.html -rw-r--r-- 1 alan alan 3008 2005-12-13 06:48
20051212.html -rw-r--r-- 1 alan alan 4058 2005-12-14 03:59
20051213-fmt.html -rw-r--r-- 1 alan alan 9920 2005-12-14 03:58
20051213.html -rw-r--r-- 1 alan alan 3416 2005-12-17 00:52
20051216-fmt.html
همانطور
که میبینید، خروجی کاملا مشابه با هنگامی
است که تابع system
فراخوانی
شده است.
آرگومانهای
ورودی با
استفاده از دو مقدار ARGC
و
ARGV
میتوانید
آرگومانهای ارسالی به برنامه خود را
بخوانید و آنها را طبق نیاز خود پردازش
کنید.
با
مقایسه مقدار ARGC
میتوانید
بفهمید که آیا آرگومانی به برنامه ارسال
شده است یا خیر.
در
صورتی که مقدار ARGC
بزرگتر
از عدد ۲ باشد، به این معنی است که بیش از
یک آرگومان به دستور ارسال شده است، در
صورتی که مقدار آن برابر ۲ باشد، ۱ آرگومان
به دستور ارسال شده است.
ARGV
نیز
یک آرایه بوده و هر آرگومان در یکی از
اندیسهای آن جا میگیرد.
نخستین
آرگومان در اندیس ۱ و به همین ترتیب قرار
داده میشوند.
برای
روشن شدن بیشتر مطلب، به برنامه مثال زیر
توجه کنید:
#!/usr/bin/awk -f
BEGIN{
if(ARGC > 2){
for (i in ARGV){
if (i >= 1){
print ARGV[i]
}
}
}else if(ARGC == 2){
print ARGV[1]
}
}
همانطور
که مشاهده میکنید، برنامه ابتدا تعداد
آرگومانهای ورودی را پیدا کرده و با
توجه به آن این آرگومانها را با استفاده
از یک حلقه for
و
دستـور print
بر
روی صفحه نمایش چاپ میکند.
در
صورتی کــه ایـن بـرنـامه را در یک فایل
ذخیره کرده و به شکل زیر اجرا کنید، نمونه
خروجی ارائه شده را مشاهده خواهید کرد:
$
./test.awk 1 2 3 1 2 3
در
قسمت آینده، به بحث در مورد توابع ایجاد
شده توسط کاربر (توابع
سفارشی)
خواهیم
پرداخت.
ترجمه
و اضافات:
آلن
باغومیان alan@technotux.com
منبع:
http://linuxgazette.net/issue67/nazario.html
،
GNU/Awk
User's Guide
PDF Version
|