AWK زبان بسیار کوچکی است و فقط چند نوع دادهی پایه دارد. در این درس به عدد و رشته میپردازیم.
اعداد در AWK به صورت اعداد اعشاری با دقت مضاعف پیادهسازی میشوند. میان عدد صحیح، عدد اعشاری و عدد double هیچ تفاوتی وجود ندارد.
AWK ثابتهای عددی مبنای هشت (که با 0 شروع میشوند) و ثابتهای عددی مبنای شانزده (که با 0x یا 0X شروع میشوند) را میشناسد.
میتوانید از عملگرهای حسابی استاندارد +، -، *، /، % استفاده کنید.
عملگر توان ^ است.
چند تابع عددی توکار وجود دارد، از جمله توابع مثلثاتی، تولید اعداد تصادفی، و int(x) که یک عدد را به نزدیکترین عدد صحیح میان x و صفر میبُرد.
رشتههای AWK دنبالهای از کاراکترها هستند. یک ثابت رشتهای را با علامت نقلقول دوگانه مشخص کنید.
فقط یک عملیات رشتهای وجود دارد: اتصال. عملیات اتصال عملگر ویژهای ندارد؛ کافی است دو رشته را کنار هم بگذارید تا به هم بچسبند:
BEGIN {
hw = "Hello" "World"
print hw
}
# => HelloWorld
print یک دستور است، نه یک تابع.
print به پرانتز نیازی ندارد.
AWK توابع متعددی برای دستکاری رشتهها دارد. در ادامهی مسیر، بهتدریج و بهطور عمیق با آنها آشنا خواهیم شد.
هیچ عملگر صریحی برای تبدیل میان عدد و رشته وجود ندارد. AWK این کار را بر اساس بافت برنامه بهصورت ضمنی انجام میدهد. این باعث میشود کار با مقادیر فیلدهای ورودی بسیار ساده شود: AWK معمولاً همان کاری را میکند که شما میخواهید.
print x + y مقدار متغیرهای x و y را به لطف عملیات عددی + به عدد تبدیل میکند.print x y مقدار متغیرهای x و y را به لطف عملیات اتصال به رشته تبدیل میکند.اگر میخواهید صریح عمل کنید، 0 + x نمایش عددی x را میدهد و "" x نمایش رشتهای x را.
روشی که AWK یک رشته را به عدد تبدیل میکند میتواند گیجکننده باشد. یک راه ساده برای فکر کردن به آن این است که AWK از ابتدای رشته «کاراکترهای عددی» را میخواند تا به یک کاراکتر «غیرعددی» برسد. چند نمونه:
"2.5" به عدد 2.5 تبدیل میشود؛"1e3" به عدد 1000 تبدیل میشود (نماد علمی)؛"456abc" به عدد 456 تبدیل میشود (چون a یک «رقم» نیست، تبدیل همانجا متوقف میشود)."abc789" به عدد 0 تبدیل میشود (در ابتدای رشته هیچ عددی وجود ندارد).شما به دوستی کمک میکنید تا از خوانشهایی که او از گوشههای مختلف باغش گرفته است، گزارشی تهیه کند. متأسفانه، دوست شما دادهها را در قالبی عجیب ذخیره کرده است. هر خوانش مجموعهای از فیلدهای جداشده با کاما است. با این حال، او اعداد دو رقمی را در دو ستون ذخیره کرده است.
| شمارهی فیلد | معنا |
|---|---|
| ۱ | شمارهی شناسه |
| ۲ | مکان |
| ۳ | خوانش اول، رقم دهگان |
| ۴ | خوانش اول، رقم یکان |
| ۵ | خوانش دوم، رقم دهگان |
| ۶ | خوانش دوم، رقم یکان |
برای یک سطر ورودی مانند 101,house,4,2,5,4
42 است،54 است.وظیفهی شما این است که میانگین دو خوانش را پیدا کنید و نتیجهی هر سطر را در قالب زیر خروجی دهید
#<id>, <label> = <average>
از آنجا که میانگین ۴۲ و ۵۴ برابر ۴۸ است، خروجی برای سطر نمونه باید به این صورت باشد:
#101, house = 48