در مقاله "مقدمه ای بر AWK" معرفی مختصری راجع به awk داشتیم.
الان می خواهم یک مثال از پردازش متن با awk را مطرح کنم و نکاتش را هم بعنوان تمرین خدمتتان عرض کنم.
مرحله 1 : با مراجعه به صفحه "آمار بازدید پستها" و استفاده از دکمه "نمایش پستهای بیشتر" همه پست ها را در این صفحه لیست می کنیم.
مرحله 2 : select و copy و paste در یک فایل تکست مطابق تصویر
مرحله 3 : اعداد فارسی نوشته شده در حقیقت عدد نیستند، کاراکتر هستند و بنابراین برای عملیات ریاضی نمی توان از آن ها استفاده کرد.
اگر خیلی زیاد و فایل حجیم باشد راه حل استفاده از یک اسکریپت و آرایه و ... برای تغییر کاراکترهای درون فایل است. در اینجا من با همان text editor از find/replace استفاده می کنم. 10کاراکتر بیشتر نیست که باید تغییر کند و یکی دو دقیقه وقت نیاز دارد که از برنامه نویسی کردن آن کمتر و ساده تر است!
مرحله 4 : اسکریپت awk ذیل :
#awk 'BEGIN{x="0"} /%/ {x=x+$3;print $3} END{print "\ntotal="x}' virgool.txt
در ابتدای اسکریپت با استفاده از بلاک BEGIN یک متغییر x با مقدار صفر تعریف کرده ام.
سپس با استفاده از /%/ ذکر کرده ام فقط خط هایی که % داشته باشند. چرا؟ به فایل تکست دقت کنید، عدد آمار بازدید در خطی است که در آن % هست.
البته یک مشکلی هست، 2 مقاله اخیر که هنوز نسبت مطالعه به % ندارند از لیست جا افتاده اند! ولی مهم نیست هدف ما در این مقاله ذکر یک مثال است.
سپس برای این خط ها که % داشته اند گفته ام x بشود =+ مقدار ستون 3، یعنی مقدار x را با مقدار ستون 3 که عدد انگلیسی کردیم جمع بزن و آن عدد ستون 3 را هم چاپ کن.
سپس در بلاک END گفته ام مقدار x را به همراه متن =ntotal\ چاپ کن.
دقت بفرمایید BEGIN و END در ابتدا و انتهای اسکریپت اجرا می شوند و بقیه Actionها خط به خط.
شما ممکنه بفرمایید هزار راه دیگر دارد و اصلاً استفاده از ماشین حساب سریع تر و راحت تر است!
من هم عرض می کنم قصد مقاله یک مثال کاربردی برای awk بود! انشاالله در آینده و مقالات بعد نیز مثال های کاربردی مشابه را برای استفاده از ابزارهای پردازش متنی در لینوکس تکرار کنیم.