انطباق محدوده ورودی در خطها
پنج شنبه 2 دی 1389 7:17 AM
$ yes Wikipedia | awk 'NR % 4 == 1, NR % 4 == 3 { printf "%6d %s\n", NR, $0 }' | sed 7q
1 Wikipedia 2 Wikipedia 3 Wikipedia 5 Wikipedia 6 Wikipedia 7 Wikipedia 9 Wikipedia $
دستور yes دائما این آرگومانها را روی خط چاپ میکند(با پیش فرض حرف 'y')در این مورد ما به دستور می گوییم که کلمه "Wikipedia" را چاپ کن .عبارت فعالیت هر خط شماره دار را چاپ میکند.تابعprintf از تابع استاندارد printf در C تقلید میکند.و مشابه دستور print که در بالا توضیح داده شد کار میکند.الگو برای انطباق به هر حال به شرح ذیل کار میکند. NR شماره رکوردها است. علامت خطوط ورودی که awk تا به حال خوانده است.شماره خط جاری شروع میشود از 1 برای خط اول ورودی.%عملگر باقی مانده است . NR % 4 == 1 در ابتدا درست است.5 ،9و غره خطوط ورودی هستند . همانطور که NR % 4 == 3 درست است برای خط 3،7،11و غیره خطوط ورودی .محدوده الگو اول نادرست است تا وقتی که قسمت اول منطبق شود .در خط اول وسپس به بالا رفتن ادامه میدهد تا وقتی که با قسمت دوم منطبق باشد .در خط سوم سپس نادرست میشود تا وقتی که قسمت اول با خط پنجم منطبق باشد .دستور Sed استفاده میشود برای چاپ 7 خط اول.برای جلوگیری از دستور yes برای همیشه این همعنای head -7 اگر دستور اصلی موجود باشد. قسمت اول محدوده الگو بصورت دائمی درست میباشد e.g. 1. به عنوان محدوده شروع ورودی میتواند استفاده شود.به طور مشابه اگر قسمت دوم بطور دائمی نادرست باشد e.g. 0 محدوده ادامه پیدا میکند تا وقنتی که ورودی پایان یابد.
cut here--$/, 0--^/
چاپ کردن خطوط ورودی از خط اول منطبق بر عبارت با قاعده ^--cut here--$ که این یک خط شامل فقط یک عبارت "---cut here---" تا به انتها است. محاسبه تکرار کلمه برای تکرار کلمه از آرایه شرکت پذیر استفاده میشود
{"+[BEGIN { FS="[^a-zA-Z ( ++for (i=1; i<=NF; i} ++[(words[tolower($i { (END { for (i in words [print i, words[i {
بلوک BEGIN زمینه جدا کننده را به هر دسته از کاراکترهای غیر الفبایی نسبت میدهد.توجه داشته باشید که جدا کننده میتواند عبارت با قاعده باشد .بعد از آن ما به یک فعالیت محض می رسیم.که فعالیت را در هر خط ورودی انجام میدهد.در این مورد ما برای هر زمینه در روی خط یک واحد به شماره دوره کلمه اضافه می کنیم.ابتدا کلمه را به حروف کوچک تبدیل میکند ظاهر میشود در انتها ،در پایان بلوک ،ما کلمه را با تعداد تکرارش چاپ می کنیم:
( for (i in words
ایجاد حلقه برای حرکت در میان کلمات آرایه .تنظیم کردن i برای هر زیر نویس از آرایهای نسبت به بسیاری از زبانا متفاوت است که حلقه در میان کلمات آرایه حرکت کند.این به این معنا است که چاپ کردن کلمه با هر شمارندهای به سادهترین راه ممکن است. Tolower یک جمع در یک حقیقت Awk ساخته شده قبل از منتشر شدن کتاب است .