Hootan Alghaspour
Hootan Alghaspour
خواندن ۲ دقیقه·۳ سال پیش

محاسبه مجموع بازدید پست ها در ویرگول با AWK

در مقاله "مقدمه ای بر AWK" معرفی مختصری راجع به awk داشتیم.

الان می خواهم یک مثال از پردازش متن با awk را مطرح کنم و نکاتش را هم بعنوان تمرین خدمتتان عرض کنم.

مرحله 1 : با مراجعه به صفحه "آمار بازدید پست‌ها" و استفاده از دکمه "نمایش پست‌های بیشتر" همه پست ها را در این صفحه لیست می کنیم.

مرحله 2 : select و copy و paste در یک فایل تکست مطابق تصویر


مرحله 3 : اعداد فارسی نوشته شده در حقیقت عدد نیستند، کاراکتر هستند و بنابراین برای عملیات ریاضی نمی توان از آن ها استفاده کرد.

در ستون آخر جمع اعداد فارسی معادل 0 است زیرا اصلاً عدد نیستند، کاراکتر هستند
در ستون آخر جمع اعداد فارسی معادل 0 است زیرا اصلاً عدد نیستند، کاراکتر هستند


اگر خیلی زیاد و فایل حجیم باشد راه حل استفاده از یک اسکریپت و آرایه و ... برای تغییر کاراکترهای درون فایل است. در اینجا من با همان text editor از find/replace استفاده می کنم. 10کاراکتر بیشتر نیست که باید تغییر کند و یکی دو دقیقه وقت نیاز دارد که از برنامه نویسی کردن آن کمتر و ساده تر است!

مرحله 4 : اسکریپت awk ذیل :

#awk 'BEGIN{x=&quot0&quot} /%/ {x=x+$3;print $3} END{print &quot\ntotal=&quotx}' virgool.txt

در ابتدای اسکریپت با استفاده از بلاک BEGIN یک متغییر x با مقدار صفر تعریف کرده ام.

سپس با استفاده از /%/ ذکر کرده ام فقط خط هایی که % داشته باشند. چرا؟ به فایل تکست دقت کنید، عدد آمار بازدید در خطی است که در آن % هست.

البته یک مشکلی هست، 2 مقاله اخیر که هنوز نسبت مطالعه به % ندارند از لیست جا افتاده اند! ولی مهم نیست هدف ما در این مقاله ذکر یک مثال است.

سپس برای این خط ها که % داشته اند گفته ام x بشود =+ مقدار ستون 3، یعنی مقدار x را با مقدار ستون 3 که عدد انگلیسی کردیم جمع بزن و آن عدد ستون 3 را هم چاپ کن.

سپس در بلاک END گفته ام مقدار x را به همراه متن =ntotal\ چاپ کن.

دقت بفرمایید BEGIN و END در ابتدا و انتهای اسکریپت اجرا می شوند و بقیه Actionها خط به خط.

شما ممکنه بفرمایید هزار راه دیگر دارد و اصلاً استفاده از ماشین حساب سریع تر و راحت تر است!

من هم عرض می کنم قصد مقاله یک مثال کاربردی برای awk بود! انشاالله در آینده و مقالات بعد نیز مثال های کاربردی مشابه را برای استفاده از ابزارهای پردازش متنی در لینوکس تکرار کنیم.

awklinuxلینوکسپردازش متنویرگول
هوتن القاس پور
شاید از این پست‌ها خوشتان بیاید