ورود/ایجاد حساب کاربری
   منوی اصلی
· خانه
· لیست کاربران
· جستجو
· آمار مشاهدات
· آرشیو مقالات


- شرح
· راهنمای نویسندگان
· درباره ما

   همکاری با نشریه
در صورتی که مایل به همکاری با نشریه هستید، می‌توانید در لیست پستی نشریه عضو شده و در جریان امور قرار گیرید. برای اطلاعات بیشتر، اینجا کلیک کنید.

   کاربران
سردبیر
هیچ مدیر کمکی حاضر
همکاران
هیچ مدیر کمکی حاضر
اعضا:
جدیدترین:جدید امروز:0
جدیدترین:جدید دیروز:0
جدیدترین:مجموع:2471
جدیدترین:جدیدترین:
ufumenarayu
اعضا:حاضر
اعضا:اعضا:0
مهمان‌ها:مهمان‌ها:17
مجموع:مجموع:17
کاربران حاضر
هیچ کاربر حاضری وجود ندارد

   ورود کاربران




 


 برای ورود مشکل دارید؟
 ثبت نام کاربران جدید

آشنایی با 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

تمامی مطالب و مقالات این سایت تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد.