نحوه نوشتن دستورات و اسکریپت AWK

دستورات، نحو و مثالها

فرمان awk یک روش قدرتمند برای پردازش یا تجزیه و تحلیل فایل های متنی است، به ویژه، فایل های داده که توسط خطوط (ردیف) و ستون ها سازمان یافته است.

دستورات awk ساده را می توان از خط فرمان اجرا کرد . وظایف پیچیده تر باید به صورت برنامه awk (به اصطلاح awk scripts) به یک فایل نوشته شود.

فرمت اصلی دستور awk به این شکل است:

awk 'pattern {action} input-file> فایل خروجی

این به این معنی است: هر خط از فایل ورودی را؛ اگر خط شامل الگو باشد، عمل به خط اعمال می شود و خط حاصل می شود به فایل خروجی. اگر الگوی حذف شود، عمل به تمام خط اعمال می شود. مثلا:

awk '{print $ 5}' table1.txt> output1.txt

این بیانیه عنصر ستون پنجم هر خط را می گیرد و آن را به عنوان یک خط در فایل خروجی "output.txt" می نویسد. متغیر "$ 4" به ستون دوم اشاره دارد. به طور مشابه می توانید به ستون اول، دوم و سوم با $ 1، $ 2، $ 3 و غیره دسترسی پیدا کنید. به طور پیش فرض ستون ها با فضاهای یا جداول (به اصطلاح فضای سفید) تفکیک می شوند. بنابراین، اگر فایل ورودی "table1.txt" شامل این خطوط باشد:

1، جاستین تیمبرلیک، عنوان 545، قیمت 7.30 $ 2، تیلور سویفت، عنوان 723، قیمت 7.90 $، 3، مایکل جگر، عنوان 610، قیمت 7.90 $، 4، Lady Gaga، عنوان 118، قیمت 7.30 $ 5، جانی کیسی، عنوان 482، قیمت 6.50 $ 6، الویس پریسلی، عنوان 335، قیمت 7.30 دلار 7، جان لنون، ​​عنوان 271، قیمت 7.90 $ 8، مایکل جکسون، عنوان 373، قیمت 5.50 $

سپس دستور خطوط زیر را به فایل خروجی "output1.txt" بنویسید:

545، 723، 610، 118، 482، 335، 271، 373،

اگر جداساز ستون چیزی غیر از فضاهای یا زبانه ها، مانند کاما باشد، می توانید آن را در بیانیه awk به صورت زیر مشخص کنید:

awk -F، '{print 3 $}' table1.txt> output1.txt

این عنصر از ستون 3 هر خط را انتخاب کنید اگر ستون ها با کاما جدا شوند در نظر گرفته می شوند. بنابراین خروجی در این مورد می باشد:

عنوان 545 عنوان 723 عنوان 610 عنوان 118 عنوان 482 عنوان 335 عنوان 271 عنوان 373

لیست اظهارات در داخل براکت های در حال شکل گیری ('{'، '}') یک بلوک نامیده می شود. اگر یک علامت شرطی در مقابل یک بلوک قرار دهید، عبارات داخل بلوک فقط اگر شرط درست باشد اجرا شود.

awk '$ 7 == "\ $ 7.30" {print $ 3}' table1.txt

در این حالت، شرایط 7 $ == "\ $ 7.30" است، یعنی عنصر در ستون 7 برابر با 7.30 دلار است. بکسلش مقابل علامت دلار برای جلوگیری از تفسیر 7 دلار به عنوان یک متغیر استفاده می شود و به معنای واقعی کلمه، علامت دلار را می گیرد.

بنابراین این بیانیه awk عنصر در ستون سوم هر خط را صادر می کند که در ستون 7 دارای $ 7.30 می باشد.

شما همچنین می توانید عبارات منظم را به عنوان شرط استفاده کنید. مثلا:

awk '/ 30 / {print $ 3}' table1.txt

رشته بین دو اسلش ('/') عبارات منظم است. در این مورد، فقط رشته "30." این به این معنی است که اگر یک خط حاوی رشته "30" باشد، سیستم عنصر را در ستون 3 آن خط چاپ می کند. خروجی در مثال بالا می تواند باشد:

تیمبرلیک، گاگا، پرسلی،

اگر عناصر جدول اعداد awk باشند، می توانند محاسبات را بر روی آنها اجرا کنند مانند این مثال:

awk '{چاپ ($ 2 * $ 3) + $ 7}'

علاوه بر متغیرهایی که به عناصر ردیف فعلی دسترسی دارند ($ 1، $ 2، و غیره) متغیر $ 0 است که به ردیف کامل (خط) اشاره دارد و متغیر NF که به تعداد فیلدها نگه می دارد.

شما همچنین می توانید متغیرهای جدید را در این مثال تعریف کنید:

awk '{sum = 0؛ برای (col = 1؛ col <= NF؛ col ++) sum + = $ col؛ مبلغ چاپ } '

این محاسبه و چاپ تمام عناصر هر ردیف است.

اظهارات Awk اغلب همراه با دستورات sed است .