از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
چگونه یک فایل از رشته ها را با Awk تقسیم کنیم
سرفصلهای مطلب
دستور awk لینوکس (مختص شده از نام توسعه دهندگان؛ Aho، Weinberger و Kernighan) یک راه عالی برای process و فایلی از رشته ها را تجزیه و تحلیل کنید. برای اینکه فایل ها آموزنده تر باشند، باید به صورت ردیف و ستون سازماندهی شوند. سپس، می توانید از awk استفاده کنید روی این فایل ها به:
- فایل ها را خط به خط اسکن کنید.
- هر خط را به فیلدها/ستون ها تقسیم کنید.
- الگوها را مشخص کنید و خطوط فایل را با آن الگوها مقایسه کنید
- اقدامات مختلف را انجام دهید روی خطوطی که با یک الگوی داده شده مطابقت دارند
در این مقاله، کاربرد اصلی دستور awk و روش استفاده از آن برای تقسیم یک فایل از رشته ها را توضیح خواهیم داد. ما نمونه های این مقاله را اجرا کرده ایم روی یک سیستم Debian 10 Buster اما می توان آنها را به راحتی تکرار کرد روی اکثر توزیع های لینوکس
فایل نمونه ای که از آن استفاده خواهیم کرد
فایل نمونه رشته هایی که برای نشان دادن استفاده از دستور awk استفاده خواهیم کرد به شرح زیر است:
این چیزی است که هر ستون از فایل نمونه نشان می دهد:
- ستون اول شامل نام کارکنان / معلمان یک مدرسه است
- ستون دوم شامل موضوعی است که کارمند آموزش می دهد
- ستون سوم نشان می دهد که کارمند استاد یا استادیار است
- ستون چهارم شامل حقوق کارمند است
مثال 1: از Awk برای استفاده کنید print تمام خطوط یک فایل
چاپ هر خط از یک فایل مشخص شده رفتار پیش فرض دستور awk است. در دستور زیر در دستور awk، ما هیچ الگوی را مشخص نمی کنیم که awk باید باشد print، بنابراین دستور قرار است که “print” عمل به تمام خطوط فایل.
نحو:
مثال:
در این مثال، من دستور awk را به print محتویات فایل نمونه من، خط به خط.
مثال 2: از awk to استفاده کنید print فقط خطوطی که با یک الگوی داده شده مطابقت دارند
با awk، می توانید یک الگو را مشخص کنید و دستور خواهد شد print فقط خطوط مطابق با آن الگو.
نحو:
مثال:
از فایل نمونه اگر بخواهم print فقط خط(هایی) که حاوی متغیر ‘B’ هستند، می توانم از دستور زیر استفاده کنم:
برای معنادارتر شدن مثال، اجازه دهید print فقط اطلاعات مربوط به کارمندانی که “پروفسور” هستند.
این دستور فقط خطوط/مدخل هایی را چاپ می کند که حاوی رشته “professor” هستند، بنابراین اطلاعات ارزشمندتری که از داده ها مشتق شده است داریم.
مثال 3. از awk برای تقسیم فایل استفاده کنید تا فقط فیلدها/ستون های خاص چاپ شوند.
به جای پرینت کل فایل، می توانید awk را در آن ایجاد کنید print فقط ستون های خاصی از فایل Awk همه کلمات را که با فاصله سفید از هم جدا شده اند، در یک خط به عنوان رکورد ستونی به طور پیش فرض در نظر می گیرد. رکورد را در یک متغیر $N ذخیره می کند. جایی که $1 نشان دهنده اولین کلمه، $2 ذخیره کلمه دوم، $3 چهارم، و غیره روی. $0 کل خط را ذخیره می کند تا خط who چاپ شود، همانطور که در مثال 1 توضیح داده شد.
نحو:
مثال:
دستور زیر خواهد بود print فقط ستون اول (نام) و ستون دوم (موضوع) فایل نمونه من:
مثال 4: از Awk برای شمارش و استفاده کنید print تعداد خطوطی که یک الگو در آنها مطابقت دارد
میتوانید به awk بگویید تعداد خطوطی را که در آنها یک الگوی مشخص مطابقت دارد، بشمارد و سپس آن «شمارش» را خروجی کند.
نحو:
filename.txt
مثال:
در این مثال، من میخواهم تعداد افرادی که موضوع «انگلیسی» را تدریس میکنند، بشمارم. بنابراین به دستور awk می گویم که با الگوی “انگلیسی” و print تعداد خطوطی که این الگو در آنها مطابقت دارد.
شمارش در اینجا نشان می دهد که 2 نفر در حال آموزش زبان انگلیسی از سوابق فایل نمونه هستند.
مثال 5: از awk to استفاده کنید print فقط خطوطی با بیش از تعداد مشخصی کاراکتر
برای این کار، از تابع awk داخلی به نام “طول” استفاده خواهیم کرد. این تابع طول رشته ورودی را برمی گرداند. بنابراین، اگر ما می خواهیم awk به print فقط خطوطی با تعداد کاراکترهای بیشتر یا حتی کمتر از آن، میتوانیم از تابع length به شکل زیر استفاده کنیم:
برای چاپ خطوط با کاراکترهای بیشتر از عدد:
برای چاپ خطوط با کاراکترهای کمتر از عدد:
جایی که n تعداد کاراکترهایی است که می خواهید برای یک خط مشخص کنید.
مثال:
دستور زیر خواهد بود print فقط خطوطی از فایل نمونه من که دارای کاراکترهای بیش از 30 هستند:
مثال 6: از awk برای ذخیره خروجی فرمان در فایل دیگری استفاده کنید
با استفاده از عملگر تغییر مسیر ‘>’، می توانید از دستور awk استفاده کنید print خروجی آن به یک فایل دیگر این راهی است که می توانید از آن استفاده کنید:
مثال:
در این مثال، من از عملگر redirection با دستور awk به استفاده خواهم کرد print فقط اسامی کارکنان (ستون 1) در یک فایل جدید:
من از طریق دستورات cat تأیید کردم که فایل جدید فقط شامل نام کارمندان است.
مثال 7: از awk to استفاده کنید print فقط خطوط غیر خالی از یک فایل
Awk چند دستور داخلی دارد که می توانید از آنها برای فیلتر کردن خروجی استفاده کنید. به عنوان مثال، دستور NF برای نگه داشتن تعداد فیلدها در رکورد ورودی فعلی استفاده می شود. در اینجا از دستور NF استفاده خواهیم کرد print فقط خطوط غیر خالی فایل:
بدیهی است که می توانید از دستور زیر استفاده کنید print خطوط خالی:
مثال 8: از awk برای شمارش کل خطوط یک فایل استفاده کنید
یک تابع داخلی دیگر به نام NR تعداد رکوردهای ورودی (معمولاً خطوط) یک فایل معین را نگه می دارد. می توانید از این تابع در awk به صورت زیر برای شمارش تعداد خطوط یک فایل استفاده کنید:
این اطلاعات اولیه ای بود که برای شروع تقسیم فایل ها با دستور awk نیاز دارید. میتوانید از ترکیب این مثالها برای دریافت اطلاعات معنادارتر از فایل رشتههای خود از طریق awk استفاده کنید.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-31 15:25:03