اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

نحوه استفاده از دستور AWK به منظور Print گرفتن فیلدها و ستون های یک فایل بخش 2

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    نحوه استفاده از دستور AWK به منظور Print گرفتن فیلدها و ستون های یک فایل بخش 2

    در این پارت از سری آموزش های دستور AWK به یکی از مهم ترین قابلیت های دستور awk میپردازیم که در حقیقت ویرایش فیلد است.

    خوب است بدانید که AWK به صورت اتوماتیک خط های ورودی را به فیلدها تقسیم میکند و در حقیقت آنها را مجزا کرده و یک فیلد میتواند به عنوان مجموعه ای از کاراکتر هایی تعریف شود که از فیلدهای دیگر توسط یک مجزا کننده داخلی فیلد جدا میشوند.

    اگر با Linux/Unix آشنا هستید و یا برنامه نویسی Shell انجام میدهید باید بدانید که جدا کننده درونی فیلد یا متغییر IFS مخفف Internal Fild Seprator چیست. IFS پیش فرض در awk کلیدهای Tab و Space روی کیبرد هستند.

    و اما ایده مجزا سازی فیلد در AWK به این صورت عمل میکند. زمانی که این دستور با یک فایل ورودی روبه رو میشود منطبق بر IFS تعریف شده، اولین مجموعه از کاراکترها به عنوان فیلد اول شناسایی شده و با استفاده از متغییر $1 قابل دسترسی میباشد. مجموعه دوم از کاراکتر ها فیلد دوم میباشد و با استفاده از $2 قابل دسترسی است. سومین مجموعه از کاراکترها نیز فیلد سوم بوده که با استفاده از $3 میتوان به آن دسترسی داشت و همین طور برای فیلدهای چهارم تا پایان مجموعه کاراکترها.

    برای درک بهتر ویرایش فیلدهای AWK مثالهای زیر را با هم بررسی میکنیم.

    مثال 1 : من یک فایل متنی با نام linux-zone.txt ایجاد کردم.
    کد PHP:
    [mohammad@localhost mohammad-exam]$ vim linux-zone.txt
    [mohammad@localhost mohammad-exam]$
    [
    mohammad@localhost mohammad-exam]$ cat linux-zone.txt
    linux
    -zone.org online resource of linux cisco voip asterisk elastix mikrotik and hosting
    [mohammad@localhost mohammad-exam]$ 
    سپس از طریق command line میخواهم اولین، دومین و سومین فیلد از این فایل را با استفاده از دستور زیر print بگیرم.
    کد PHP:
    [mohammad@localhost ~]$ awk '//{print $1 $2 $3}' linux-zone.txt
    linux
    -zone.orgonlineresource 
    همانطور که خروجی دستور بالا را میبینید کاراکترهای 3 فیلد اول براساس IFS تعریف شده که space میباشد پرینت شده اند.

    فیلد اول که linux-zone.org میباشد از طریق استفاده از $1 قابل دسترسی است.
    فیلد دوم که is میباشد از طریق استفاده از $2 قابل دسترسی است.
    فیلد سوم که the میباشد از طریق استفاده از $3 قابل دسترسی است.

    اگر شما به خروجی پرینت شده دقت کنید مقادیر فیلدها مجزا نشده اند و این شیوه ایست که به صورت پیش فرض دستور العمل print رفتار میکند.

    برای مشاهده خروجی به صورت واضح و به نحوی که بین مقادیر فیلد فاصله (space) باشد شما نیاز دارید که عملگر کاما (,) همانند زیر به دستور اضافه کنید.
    کد PHP:
    [mohammad@localhost ~]$ awk '//{print $1, $2, $3;}' linux-zone.txt
    linux
    -zone.org online resource 
    نکته مهمی که باید به آن توجه کرد و همیشه به خاطر سپرد این است که استفاده از $ (دالر) در AWK با استفاده آن در Shell Scripting متفاوت است.

    تحت شل اسکریپتینگ از $ برای دسترسی به مقدار متغییرها استفاده میشود در حالی که در AWK از $ تنها برای دسترسی به محتوای یک فیلد استفاده میشود و نه برای دسترسی به مقدار متغییرها.


    مثال 2 : در این مثال فایل my_shoping.list را بررسی میکنیم که شامل چندین خط میباشد.
    کد PHP:
    No    Item_Name        Unit_Price    Quantity    Price
    1    Mouse            
    #20,000           1        #20,000
    2     Monitor            #500,000       1        #500,000
    3    RAM_Chips        #150,000       2        #300,000
    4    Ethernet_Cables            #30,000           4        #120,000 
    برای تنها پرینت گرفتن Unit_Price از هر Item_Name در لیست خرید شما باید دستور زیر را اجرا کنید.
    کد PHP:
    [mohammad@localhost ~]$ awk '//{print $2, $3}' my_shoping.list
    Item_Name Unit_Price
    Mouse 
    #20,000
    Monitor #500,000
    RAM_Chips #150,000
    Ethernet_Cables #30,000
    [mohammad@localhost ~]$ 
    دستور AWK همچنین دستور printf را در خود دارد که به شما در فرمت خروجی تان کمک میکند که در حقیت یک شیوه زیباست به طوری که شما میتوانید خروجی ها را بسیار واضح ببینید. همانطور که میبینید خروجی بالا به اندازه کافی واضح و روشن نیست.

    برای فرمت کردن خروجی Item_Name و Unit_Price از printf همانند دستور زیر استفاده میکنیم.
    کد PHP:
    [mohammad@localhost ~]$ awk '//{printf "%-10s %s\n",$2, $3}' my_shoping.list
    Item_Name  Unit_Price
    Mouse      
    #20,000
    Monitor    #500,000
    RAM_Chips  #150,000
    Ethernet_Cables #30,000
    [mohammad@localhost ~]$ 

    خلاصه :
    زمانی که از دستور awk برای فیلتر متن یا رشته های متنی استفاده میکنید ویرایش فیلد یکی از موارد بسیار مهم است، به شما کمک میکند که اطلاعات منظمی را در ستون های موجود در یک لیست دریافت کنید و همیشه به خاطر داشته باشید که استفاده از عملگر $ در دستور AWk با استفاده از آن در Shel Scripting متفاوت است.

    امیدوارم این مقاله برای شما مفید بوده باشد و در صورت هر گونه اطلاعات بیشتر در این زمینه باعث خوشحالیست که این مطلب را تکمیل تر کنید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 07-14-2019, 02:35 PM.

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X